2011-10-28 9 views
3

連絡先を追加したり削除したりできるアプリがあります。また、既存の連絡先に既存の値がある場合は、それを正常に変更することができます。しかし、私は既存の連絡先に新しい値を挿入することができないようです。自宅の電話番号のためではなく、職場の電話番号の既存の値がある場合たとえば、私は値を追加するfillowingを使用してみました(cintact idValueworkNumberが渡されます):Androidでプログラムで連絡先に電話番号を追加するにはどうすればよいですか?

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValue(ContactsContract.Data.CONTACT_ID, idValue) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK) 
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, workNumber) 
      .build()); 
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

しかし、私はNullPointerExceptionを取得します。

java.lang.NullPointerException 
    at com.android.providers.contacts.ContactsProvider2.insertData(ContactsProvider2.java:2604) 
    at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2452) 
    at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:106) 
    at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:2256) 
    at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:214) 
    at com.android.providers.contacts.SQLiteContentProvider.applyBatch(SQLiteContentProvider.java:216) 
    at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:2290) 
    at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:217) 
    at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:194) 
    at android.os.Binder.execTransact(Binder.java:336) 
    at dalvik.system.NativeStart.run(Native Method) 

私が間違っていることを教えてもらえますか?

答えて

3

あなたはwithValue(Phone.TYPE, Phone.TYPE_WORK)

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValue(ContactsContract.Data.RAW_CONTACT_ID, idValue) 
     .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, workNumber). 
withValue(Phone.TYPE, Phone.TYPE_WORK) 
     .build()); 
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

が欠落している編集

あなたは、私がdataテーブルのスキーマをチェックし、それが唯一の生の連絡先IDを使用してIDをご連絡されていない従ってそれが正しい

CREATE TABLE data (_id INTEGER PRIMARY KEY AUTOINCREMENT, 
package_id INTEGER REFERENCES package(_id), 
mimetype_id INTEGER REFERENCES mimetype(_id) NOT NULL, 
raw_contact_id INTEGER REFERENCES raw_contacts(_id) NOT NULL, 
is_primary INTEGER NOT NULL DEFAULT 0, 
is_super_primary INTEGER NOT NULL DEFAULT 0, 
data_version INTEGER NOT NULL DEFAULT 0, 
data1 TEXT, 
data2 TEXT, 
data3 TEXT, 
data4 TEXT, 
data5 TEXT, 
data6 TEXT, 
data7 TEXT, 
data8 TEXT, 
data9 TEXT, 
data10 TEXT, 
data11 TEXT, 
data12 TEXT, 
data13 TEXT, 
data14 TEXT, 
data15 TEXT, 
data_sync1 TEXT, 
data_sync2 TEXT, 
data_sync3 TEXT, 
data_sync4 TEXT); 
+0

ありがとう、それは私の骨頭でしたが、それは問題の原因ではありませんでした。元の投稿のコードを更新しましたが、まだエラーが発生しています。 – user496854

+0

これはあなたの問題ではないようです。 – Vivek

+0

それはどういう意味ですか?コードは例外的なものです - 私の目的のためにどうすれば問題になるのですか? – user496854

0

Androidからアクセスできないため、エラーが発生しました連絡先を連絡先テーブルに直接追加します。むしろ生の連絡先を変更または追加する必要があります。Androidは自動的に連絡先を作成します。

関連する問題