2010-02-04 75 views
-3

我想我的代码更新联系人详细信息(如姓名,电话号码,电子邮件,组织的详细信息等)在android通讯录中。我成功修改了一些(姓名,电话号码和电子邮件具体),但不是全部。更新Android上的联系信息

每当我试着联系人更新的组织细节(Contacts.Organizations.COMPANY和Contacts.Organizations.TITLE)我的应用程序抛出一个异常

java.lang.UnsupportedOperationException: Cannot update URL: content://contacts/people/69/organizations/69 

的代码片段如下:

Uri baseUri = ContentUris.withAppendedId(People.CONTENT_URI, 69); 
Uri uri = Uri.withAppendedPath(baseUri, People.Phones.CONTENT_DIRECTORY); 
Cursor c = this.getContentResolver().query(uri, 
       new String[] { Contacts.Organizations._ID, Contacts.Organizations.COMPANY,Contacts.Organizations.TITLE}, 
       null, null, null); 
if(c.getCount() > 0) { 
     uri = ContentUris.withAppendedId(uri, c.getString(0)); 
ContentValues val1 = new ContentValues(); 
val1.put(Contacts.Organizations.COMPANY, "arw"); 
val1.put(Contacts.Organizations.TYPE, Contacts.Organizations.TYPE_WORK); 
val1.put(Contacts.Organizations.TITLE, "abcdef"); 
this.getContentResolver().insert(uri, val1); 
+5

这不是一个问题。在任何人都可以帮忙之前,你需要解释你认为的问题,并给我们更多的信息。 – 2010-02-04 14:43:41

+0

无论何时我尝试更新联系人的组织详细信息(Contacts.Organizations.COMPANY和Contacts.Organizations.TITLE),我的应用程序都会抛出异常java.lang.UnsupportedOperationException:无法更新URL:content:// contacts/people/69 /组织/ 69 – pankajagarwal 2010-02-05 04:33:08

回答

2

为了更新联系人中的任何数据,您需要知道该字段的现有ID。然后我用生成器类,以获得我想要更新的各个领域单独ContentProviderOperation对象,将它们添加到一个ArrayList,然后使用ContentProvider.applyBatch()方法

+0

你是如何找到特定联系人的ID的? – powder366 2014-03-12 15:26:06

1

我花了很多时间试图更新公司和标题信息。以下现在适用于我。

Uri workUri = Uri.withAppendedPath(contactUri, android.provider.Contacts.Organizations.CONTENT_DIRECTORY); 
      values.clear(); 
      values.put(android.provider.Contacts.Organizations.COMPANY, "company"); 
      values.put(android.provider.Contacts.Organizations.TYPE, android.provider.Contacts.Organizations.TYPE_WORK); 
      values.put(android.provider.Contacts.Organizations.TITLE, "job title"); 
      values.put(android.provider.Contacts.Organizations.ISPRIMARY, 1); 
      getContentResolver().insert(workUri, values); 
+0

这将插入一个新的公司。我正在寻找的东西是更新exustung compnay的详细信息 – pankajagarwal 2010-03-09 04:25:35

+0

我自己找到答案的任何方式。谢谢你的所有帮助 – pankajagarwal 2010-03-30 08:52:26

+3

frieza你是怎么解决这个问题的,我有同样的问题? – Mikey 2010-10-13 07:40:29

1
String[] projection = new String[] { ContactsContract.RawContacts._ID }; 
     String where = ContactsContract.RawContacts.CONTACT_ID + " = ?"; 
     String[] selection = new String[] { String.valueOf(1) }; 
     Cursor c = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, where, selection, null); 
     c.moveToFirst(); 
     for(int i=0;i<c.getCount();i++) 
     { 
      Log.e("id",""+c.getString(0)); 
      c.moveToNext(); 
     } 



     ContentValues values = new ContentValues(); 
     values.clear(); 
     values.put(ContactsContract.RawContacts._ID , 0); 
     getContentResolver().update(ContactsContract.RawContacts.CONTENT_URI, values,ContactsContract.RawContacts._ID + "+ ?",new String[] { String.valueOf(1) });