我需要为同一个联系人更新多个电话号码。我只能更新一个电话号码,但我不知道如何更新2例如
这是我的代码......
String stEtPhone = etPhone.getText().toString();
values.clear();
String phoneWhere = ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "=?";
String[] phoneWhereParams = new String[]{String.valueOf(idContacto),ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,stEtPhone);
cr.update(ContactsContract.Data.CONTENT_URI, values, phoneWhere, phoneWhereParams);
答案 0 :(得分:1)
您的代码应更新与WHERE
子句匹配的每一行。如果你知道有额外的行应该匹配但不是,那么那里有些错误。
一种可能的测试方法:您可能首先要查询与给定ContactsContract.CommonDataKinds.Phone.NUMBER
匹配ContactsContract.Data.RAW_CONTACT_ID
的内容,并查看返回的内容。
如果有必要(虽然我不确定这与您正在做的事情有多么不同),请迭代结果while(cursor.moveToNext())
,如果电话号码与您尝试更新的电话号码相匹配, update
它。
请注意,这是未经测试的袖口代码,因此可能存在小错误,如果您真的这样做,则需要使用List<ContentProviderOperation>
然后执行批处理操作,而不是一个接一个地做这个。
ContentResolver resolver = getContentResolver();
String[] columnsToReturn = {Data._ID, ContactsContract.CommonDataKinds.Phone.NUMBER}
// This should return all of the phone numbers that match your criteria
Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI, columnsToReturn, phoneWhere, phoneWhereParams, null);
while(cursor != null && cursor.moveToNext()){
// This code doesn't do this, but you might want to see how many items
// are returned in your cursor here to verify that you're getting what
// you should for some known case..
// I'm using the row ID here (Data._ID) to update, instead of your initial WHERE
resolver.update(ContactsContract.Data.CONTENT_URI, values, Data._ID + "=?", cursor.getString(cursor.getColumnId(Data._ID));
}
如果您在UPDATE
语句中正确设置了所有内容,则甚至不必首先执行查询。
您可能还会发现附加到this问题的代码块很有用。