Android联系人更新无效

时间:2016-01-06 06:22:04

标签: android android-contacts

我想通过联系人ID更新Android联系人。

所以,我有:   Herre我提供联系人 id = ContactsContract.RawContacts._ID          和字符串电话号码

     private void updateContact(String id, String phone) {

       ContentResolver cr = getContentResolver();

       String where = ContactsContract.Data._ID + " = ? AND " + 
             ContactsContract.Data.MIMETYPE + " = ? AND " +
             String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE)
                                                              + " = ? ";

      String[] params = new String[] {id,
                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
              String.valueOf(ContactsContract.CommonDataKinds.Phone
                                                             .TYPE_HOME)};

       //  Cursor phoneCur = managedQuery(ContactsContract.Data.CONTENT_URI,                                            null, where, params, null);
         Cursor phoneCur=  getContentResolver().
                           query(ContactsContract.Data.CONTENT_URI,
                           null, where, params, null);               
    ArrayList<ContentProviderOperation> ops = 
                                  new ArrayList<ContentProviderOperation>();

         if ( (null == phoneCur)  ) {
          createContact(id, phone);
           } else {
          ops.add(ContentProviderOperation.newUpdate
                 (ContactsContract.Data.CONTENT_URI)
                  .withSelection(where, params)
                 .withValue(ContactsContract.CommonDataKinds.Email.DATA, 
                            "somebody@android.com")
                 .build());
                }

                phoneCur.close();

                try {
                    cr.applyBatch(ContactsContract.AUTHORITY, ops);
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (OperationApplicationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


            }

但是联系人没有更新......这段代码有什么问题?

1 个答案:

答案 0 :(得分:0)

很抱歉,但您的代码看起来非常混乱,我发现有几个错误(例如,您phoneCur正在检查null,但phoneCur.getCount() == 0则没有。

另外,为什么您的代码试图用电子邮件地址替换电话号码?

无论如何,你的where条款是错误的。如果要按RawContact的ID进行过滤,则不应使用ContactsContract.Data._ID,这是数据项的行ID。

要搜索特定的RAW_CONTACT_IDwhere子句应如下所示:

String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + 
    ContactsContract.Data.MIMETYPE + " = ? AND " +
    String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE) + " = ? ";

更新

可以像这样创建用于插入新电子邮件地址的ContentProviderOperation

ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
    .withValue(ContactsContract.CommonDataKinds.Email.RAW_CONTACT_ID, id)
    .withValue(ContactsContract.CommonDataKinds.Email.MIMETYPE, 
        ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, 
        "somebody@android.com")
    .build());