安卓联系人搜索

3
我希望使用SimpleCursorAdapter实现联系人搜索,它应该像标准的Android联系人搜索一样工作。问题在于我无法正确编写筛选器。现在我的代码类似于这样:
private FilterQueryProvider filterQueryProvider = new FilterQueryProvider() {

    @Override
    public Cursor runQuery(CharSequence Constraint) {

        ContentResolver contentResolver = getActivity().getContentResolver();

        Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI,Uri.encode(Constraint.toString()));

        String[] projection = { BaseColumns._ID, Phone.PHOTO_URI, Phone.DISPLAY_NAME, Phone.NUMBER, Phone.TYPE };
        return contentResolver.query(
                uri,        
                projection, 
                null,       
                null,       
                "upper(" + Phone.DISPLAY_NAME + ") ASC");
    }
};

它可以工作,但有一个问题。当我输入一个字母 'm' 作为筛选条件时,这个筛选器会给我电话号码以数字 '5' 开头的联系人。所以它把字母转换成了数字。而我不想要这样。我该怎么办?

1个回答

4

这是我用来按姓名搜索联系人的代码片段。也许你会发现有些东西还缺失了:

public String getPhoneNumber(String name, Context context) {
    String ret = null;
    String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" like'%" + name +"%'";
    String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER};
    Cursor c = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            projection, selection, null, null);
    if (c.moveToFirst()) {
        ret = c.getString(0);
    }
    c.close();
    if(ret==null)
        ret = "Unsaved";
    return ret;
    }

嗯,对于我的情况来说,这是一种有效的代码。虽然此选择在 DISPLAY_NAME 中找到了“name”的部分,但我需要仅找到以“name”开头的 DISPLAY_NAME 的联系人。 - Ov3r1oad
哎呀,出现了 SQL 注入。 - HelloWorld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接