2010-06-23 79 views
1

我有 我面臨一個大問題:我無法將數據添加到現有聯繫人:( 我開發一個應用程序來管理聯繫人,我可以添加,刪除或編輯聯繫人 創建是好的,因爲我爲聯繫人創建了所有類型的數據(即使它們是空的)(這不是一個好方法,我將會改變這個)所以當我想編輯這些數據時,我可以找到它們到數據庫(使用Datas.CONTENT_URI)因爲它們已經存在了!將數據(電話號碼,備註等)添加到現有聯繫人(ANDROID 2.1)

但是,如果我使用ANDROID聯繫人應用程序只爲聯繫人創建填充fatas。當我嘗試添加新的電話號碼時,例如在我的應用程序中出現錯誤或者:(

這裏是我的代碼來嘗試添加電話號碼:

ContentValues contentValues = new ContentValues(); 

contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, pNewPhoneNumber.number); 
contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, pNewPhoneNumber.type); 
contentValues.put(ContactsContract.Data.CONTACT_ID, pContact.getContactId()); 

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(
    ContactsContract.Data.CONTENT_URI).withValues(contentValues).build()); 

try 
{ 
pContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
} 
catch (Exception e) 
{ 
     Context ctx = pContext.getApplicationContext(); 
     String txt = "Exception encoutered while inserting contact: " + e; 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(ctx, txt, duration); 
     toast.show(); 
Log.e(TAG, txt); 
} 

以下是錯誤:

06-23 09:21:54.030: ERROR/DatabaseUtils(111): Writing exception to parcel 
06-23 09:21:54.030: ERROR/DatabaseUtils(111): java.lang.NullPointerException 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.insertData(ContactsProvider2.java:2206) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2096) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:101) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:1941) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:211) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.SQLiteContentProvider.applyBatch(SQLiteContentProvider.java:200) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:1960) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:169) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:167) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.os.Binder.execTransact(Binder.java:287) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at dalvik.system.NativeStart.run(Native Method) 

所以我有一個數據庫的問題,OK。但我錯在哪裏?

如果你知道如何解決這個問題:讓我知道:) 謝謝

回答

5

我猜

contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ...); 

丟失。

3

非常感謝你,它完美的作品。 我必須得到聯繫人的rawid,然後使用您的解決方案。

這裏是工作的源代碼:

ContentValues contentValues = new ContentValues(); 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, pContact.getContactRawId()); 
    contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
    contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, pNewPhoneNumber.number); 
    contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, pNewPhoneNumber.type); 

    ops.add(ContentProviderOperation.newInsert(
      ContactsContract.Data.CONTENT_URI).withValues(contentValues).build()); 

再次感謝你;)

相關問題