如何在android中获取联系网站信息?

Posted

技术标签:

【中文标题】如何在android中获取联系网站信息?【英文标题】:How to get contact website information in android? 【发布时间】:2017-06-29 16:35:44 【问题描述】:

我尝试获取联系方式。我可以从 Phone.CONTENT_URI 获取 DISPLAY_NAME、Phone.DATA。我使用以下代码:

String urlData = "";
    final String[] projection = new String[] 
            ContactsContract.CommonDataKinds.Website.URL,
            ContactsContract.CommonDataKinds.Website.TYPE
    ;
    final Cursor contactData = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, ContactsContract.Data.CONTACT_ID + "=" + contactId,null, null);

    if (contactData.moveToNext()) 

        int urlColumnIndex = contactData.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL);
        String url = contactData.getString(urlColumnIndex);
        String urlType = contactData.getString(contactData.getColumnIndex(ContactsContract.CommonDataKinds.Website.TYPE));
        urlData += url + " " + urlType;
        return urlData;
    

它返回 display_name 的值。我不明白为什么我无法获取 url 数据。

我该怎么做?

编辑

我有联系人._ID。

String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));

我使用下面的函数来获取联系 url 地址。

private void getURLById(String id, ContentResolver cr) 
    Log.i("@@getURLById", ".");

    final String[] projection = new String[] 
            ContactsContract.CommonDataKinds.Website.URL,
            ContactsContract.CommonDataKinds.Website.TYPE
    ;

    String selection = ContactsContract.Data._ID + " = " + id + " AND " + ContactsContract.Contacts.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE + "'";

    final Cursor websites = getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, selection, null, null);

    Log.e("Count ", " " + websites.getCount());

计数返回零。

【问题讨论】:

不确定您要做什么,但如果有帮助,您需要使用 Threads 通过 android 访问网站 我只想获取联系人 url 数据。为什么我需要使用线程? 【参考方案1】:

保留对数据表的查询,并添加以下选择: Data.CONTACT_ID + " = " + contactId + " and " + Data.MIMETYPE + " = '" + CommonDataKinds.Website.CONTENT_ITEM_TYPE + "'"

这将只选择网站类型的行。

代码:

final String[] projection = new String[] 
        ContactsContract.CommonDataKinds.Website.URL,
        ContactsContract.CommonDataKinds.Website.TYPE
;
String selection = Data.CONTACT_ID + " = " + contactId + " AND " + Data.MIMETYPE + " = '" + CommonDataKinds.Website.CONTENT_ITEM_TYPE + "'";

final Cursor contactData = getContentResolver().query(Data.CONTENT_URI, projection, selection, null, null);

更新

Contacts._ID不是 Data._ID,请将您的选择更改为:

String selection = ContactsContract.Data.CONTACT_ID + " = " + id + " AND " + ContactsContract.Contacts.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE + "'";

【讨论】:

没有名为 Website.CONTENT_URI 的表。我不访问它。 然后查看我的编辑,添加了另一种获得相同结果的方法 是的,请看这里:developer.android.com/reference/android/provider/… 确保您正在导入正确的Data 表:android.provider.ContactsContract.Data 看我的答案更新,Data._ID是数据行的ID,不是contact-id,你需要Data.CONTACT_ID

以上是关于如何在android中获取联系网站信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 中的 Intent 中获取联系信息?

如何在没有 READ_CONTACTS 权限的情况下获取 Android 联系人详细信息

如何从listview android中的姓名获取联系方式

android开发怎样获取通讯录联系人信息

android开发怎样获取通讯录联系人信息

如何从android中的单个查询中获取联系人的名字,姓氏,电子邮件ID