Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android更新错误的联系人_Android_Contacts_Android Contacts - Fatal编程技术网

Android更新错误的联系人

Android更新错误的联系人,android,contacts,android-contacts,Android,Contacts,Android Contacts,我试图让我的应用程序更新一些联系人,但它更新了错误的联系人。我得到了联系人姓名、号码和原始Id。如果我更改了他的号码并用他的原始Id进行更新,那么这就是我的代码: Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String numero;

我试图让我的应用程序更新一些联系人,但它更新了错误的联系人。我得到了联系人姓名、号码和原始Id。如果我更改了他的号码并用他的原始Id进行更新,那么这就是我的代码:

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
    String numero;
    String fnum;
    String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    int id = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID));
    String tipo = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
    phoneNumber = phoneNumber.replace(" ", "");
    phoneNumber = phoneNumber.replace("-", "");
    phoneNumber = phoneNumber.replace("+", "");
    phoneNumber = phoneNumber.replace("*", "");
    phoneNumber = phoneNumber.replace("#", "");

    int tamanho = phoneNumber.length();
    numero = phoneNumber;

    if (tamanho == 12) {
        if (checar.indexOf(numero.substring(1, 3) + ",") != -1) {
            if(numero.substring(3).startsWith("9")){
                fnum = numero.substring(0, 3) + "" + numero.substring(4);
                update(id, fnum, tipo);
            }
        }
    }
    Thread.sleep(2000);
}
phones.close();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这就是更新方法:

public void update(int id, String number, String tipo)
    {

        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        // Number
        builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
        builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?"+ " AND " + ContactsContract.CommonDataKinds.Organization.TYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, tipo});
        builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
        ops.add(builder.build());

        // Update
        try
        {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
public void更新(int-id、字符串编号、字符串tipo)
{
ArrayList ops=新的ArrayList();
//数
builder=ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT\u URI);
builder.with selection(contacts contract.Data.CONTACT_ID+“=?”+”和“+contacts contract.Data.MIMETYPE+”=?“+”和“+contacts contract.commondatatypes.Organization.TYPE+”=?”,新字符串[]{String.valueOf(ID),contacts contract.commondatatypes.Phone.CONTENT_ITEM_TYPE,tipo});
builder.withValue(contacts contract.commondatatypes.Phone.NUMBER,NUMBER);
ops.add(builder.build());
//更新
尝试
{
getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);
}
捕获(例外e)
{
e、 printStackTrace();
}
}

我做错了什么?

我认为错的是,当您获取号码时,您正在检索原始联系人ID,但在update()中,您正在将此值传递给列联系人ID。第一个值指向原始联系人,而第二个值指向联系人表。别把它们混在一起


我还注意到,您正在尝试使用Phone.TYPE的值更新“组织”列,该值可能有效,也可能无效。

我从internet上获得了此方法。我不想更新“组织”列,可以将其删除吗?(ContactsContact.CommonDataTypes.Organization.TYPE===>ContactsContact.CommonDataTypes.TYPE)