2010-06-23 83 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()); 

再次感谢你;)

相关问题