Android内容提供商查询未检索更新的信息

时间:2018-09-26 04:51:36

标签: android

所以我写了一个查询来提取手机的WhatsApp联系人。我最初的查询是这样的:

Cursor c = con.getContentResolver().query(
        ContactsContract.RawContacts.CONTENT_URI,
        new String[]{ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY},
        ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?",
        new String[]{"com.whatsapp"},
        null
    );

ArrayList<String> myWhatsappContacts = new ArrayList<String>();
int contactNameColumn = c.getColumnIndex(ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY);

while (c.moveToNext()) {
    // You can also read RawContacts.CONTACT_ID to read the
    // ContactsContract.Contacts table or any of the other related ones.
    myWhatsappContacts.add(c.getString(contactNameColumn));
}

此操作的目的是找出手机一次与WhatsApp有多少联系。当我这样做时:

Log.i("WhatsApp contacts found:", Integer.toString(myWhatsappContacts.size());

它应该在LogCat中打印出有多少WhatsApp联系人。这行之有效-到了一定程度。

例如,假设我现在拥有的WhatsApp联系人数量为101。这个小项目的下一阶段是删除所有联系人(如果有100多个)。在这种情况下,我们去:

if (myWhatsappContacts.size() > 100) {
    //Delete all contacts code here
}

我已经测试了删除联系人代码,它可以工作。我通过通讯录应用检查了电话的通讯录,它显示为0。但是现在当我再次执行查询时(请参阅上面的代码),它仍然显示101!发生了什么事?

如果有帮助,我的DeleteContacts方法如下:

private void deleteContact(Context ctx, String phone, String name) {
    Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phone));
    Cursor cur = ctx.getContentResolver().query(contactUri, null, null, null, null);
    try {
        if (cur.moveToFirst()) {
            do {
                if (cur.getString(cur.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)).equalsIgnoreCase(name)) {
                    String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
                    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
                    ctx.getContentResolver().delete(uri, null, null);

                    return;
                }

            } while (cur.moveToNext());
        }

    } catch (Exception e) {
        System.out.println(e.getStackTrace());
    } finally {
        cur.close();
    }

    return;
}

我在做什么错?我的DeleteContacts代码是否有错误?还是查询本身有问题?

0 个答案:

没有答案