-3

我希望我的代码更新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);
4

3 回答 3

2

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

于 2011-01-17T06:45:28.757 回答
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); 
于 2010-03-08T14:16:00.567 回答
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) });
于 2012-05-22T13:41:02.207 回答