关于android 联系人查询的代码

遇到一个难题,请大家帮帮忙。是这样的一段代码:
public static String findNameByNumber(Context ctx, String number) {
String name = null;

    Uri uri2 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number);

    Cursor cursor = ctx.getContentResolver().query(uri2,
            new String[] { "display_name" }, null, null, null);
    if (cursor.getCount() == 0) {
        return null;
    } else {
        // cursor 返回时,默认指向的是 第一行的上一行,即 -1 行 ,而所有的数据是从 第 0行开始的。
        cursor.moveToNext();
        name = cursor.getString(0);// cursor 仅查询一列内容,所以取的时候,列的索引值为 0
    }
    return name;
}

这个代码中 Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number),我看出来是对uri进行的拼接,拼接好了之后,应该是这样的:content://com.android.contacts/phone_lookup/""这是字符串 。很明显查的是contact2数据库中的表phone_lookup表。然后到下面这段,我就怎么也搞不明白了,
Cursor cursor = ctx.getContentResolver().query(uri2,new String[] { "display_name" }, null, null, null); 他查询的是“dispaly_name”字段,但是这个phone_lookup表中并没有这个叫做"dispaly_name"字段呀。请问这是怎么回事呀

1个回答

你可以看一下返回的内容 cursor 中是否有这个字段,应该是有的,你的代码应该从别的地方抄来的;

qhkdh
qhkdh 回复恋恋西风: 西风,我查了一下源码。他是这么一个流程,先是Uri指向的是phonelookup表,但是他并没有这样操作。中间有一段代码,查的是contact_view视图。在那上视图里面查的联系人的姓名,而那上视图里面正好有display_name这个字段。终于搞清楚原因了。
4 年多之前 回复
qhkdh
qhkdh 回复恋恋西风: 谢谢恋恋西风的帮助。其实那篇文章我看了,还是没有找到问题的答案。
4 年多之前 回复
q610098308
恋恋西风 回复qhkdh: contacts表中没有display_name字段,这个字段反而是在raw_contacts里,看一下这里:http://blog.csdn.net/snwrking/article/details/7601794
4 年多之前 回复
qhkdh
qhkdh 你好,这段代码确实是我看别人写的。看的时候我自己也在分析这些代码,我就发现吧,他查的是phone_lookup表,但是 这上表中并没有这样的字估。不过确实能返回这个字段,我很疑惑,他是怎么做到的。
4 年多之前 回复
立即提问