【问题标题】:querying contacts - SOMETIMES returns empty cursor查询联系人 - 有时返回空游标
【发布时间】:2012-11-29 04:10:03
【问题描述】:

我正在尝试查询联系人的显示名称:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case REQ_CODE_PICK_CONTACT:
        if (resultCode == Activity.RESULT_OK) {
            Uri contactUri = data.getData();

            ContentResolver cr = getActivity().getContentResolver();
            Cursor c = cr.query(contactUri, null, null, null, null);

            if (c != null && c.moveToFirst()) {
                //get the contact name
            }
        }
        break;
    }
}

现在问题来了:

对于某些联系人,光标返回为空,我不知道为什么。 我检查了contactUri的值,它看起来像:content://com.android.contacts/data/3032

对于我尝试过的所有类型的联系人 - facebook、google、电话等,Uri 看起来都一样。

对于某些联系人,光标会返回一个结果,这很好,我可以提取姓名。但是对于其他人来说,即使 ContentUri 完全相同,它也是空的,它来自 Intent.getData()。

这里有一些事实可能与这个奇怪的问题有关:

  • 所有光标为空的联系人都是 facebook 联系人。 Uri 看起来像上面那样。

  • 并非所有 facebook 联系人都会导致此问题:我有 HTC One X,如果操作系统发现联系人之间存在关联(例如,如果它检测到类似的电话号码一个gmail帐户和facebook帐户,它建议我在它们之间“链接”)。只有未“链接”的 Facebook 联系人返回空。

现在我没有想法。有没有人遇到过这种情况?

提前致谢。

【问题讨论】:

  • 我遇到了同样的问题。找到任何提示?

标签: android contacts contactscontract


【解决方案1】:

我在 HTC Incredible S 上遇到了同样的问题,这让我认为这可能是 HTC 手机的问题。无论如何,我最终使用的解决方法是从您使用 data 意图返回的捆绑包中检索电话号码。

final String phoneNumber = data.getStringExtra("android.intent.extra.PHONE_NUMBER");

此时您需要执行一些“逆向逻辑”以使用PhoneLookup 获取联系人的其他数据。

【讨论】:

  • 谢谢,我决定忽略那些人。反正我只需要电话号码,所以不会包括 facebook-contacts。
  • 通过这个技巧,您可以获得电话号码并包括这些人:)
  • 嘿,如果它有效,如果你能接受答案,我将不胜感激:)
猜你喜欢
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多