【问题标题】:Android updating wrong contactsAndroid 更新错误的联系人
【发布时间】:2013-08-14 23:42:44
【问题描述】:

我正在尝试让我的应用更新一些联系人,但它更新了错误的人。我得到联系人姓名、号码和原始 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();
        }
    }

我做错了什么?

【问题讨论】:

    标签: android contacts android-contacts


    【解决方案1】:

    我认为问题在于您在获取数字时正在检索 RAW_CONTACT_ID,但在 update() 中,您将此值传递给 CONTACT_ID 列。第一个指向原始联系人,但第二个指向 Contacts 表。不要混合它们!

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

    【讨论】:

    • 我在网上得到了这个方法。我不想更新 ORGANIZATION 列,我可以删除它吗? (ContactsContract.CommonDataKinds.Organization.TYPE ===> ContactsContract.CommonDataKinds.TYPE)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多