【问题标题】:Search a contact with partial search string使用部分搜索字符串搜索联系人
【发布时间】:2018-01-05 22:22:14
【问题描述】:

我想通过键入特定号码的 3-4 位来搜索 android 用户的联系人列表。我已经编写了以下方法来执行相同的操作,但这仅在我写完整的 10 位数字且不少于该数字时才有效。这意味着它仅适用于完全匹配。 例如,我想要以 98965 开头的数字……等等……但是当我输入完整的 9896511112 时,我只会给我一个匹配项

 public static void getContactDetails(Context context, String number, int type) {
        String[] projection = new String[]{
                ContactsContract.PhoneLookup.DISPLAY_NAME,
                ContactsContract.PhoneLookup._ID,
                ContactsContract.PhoneLookup.LOOKUP_KEY,
                ContactsContract.PhoneLookup.PHOTO_URI,
                ContactsContract.PhoneLookup.NUMBER};
        Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim() + "%"));

        Cursor cursor = context.getContentResolver().query(contactUri, null, null, null, null);

        while (Common.nonNull(cursor) && cursor.moveToNext()) {
            String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.LOOKUP_KEY));
            String mobileNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.NUMBER));
            Log.e("I am found", "Found " + number);
        }
        cursor.close();
    }

请帮我找出我的错误。

【问题讨论】:

    标签: android sqlite contacts android-contacts


    【解决方案1】:

    终于。一件事拯救了我的一天:

    Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(partial));
    

    使用 "ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI" 代替 ContactsContract.PhoneLookup.CONTENT_FILTER_URI,它会为您工作。

    下面是我的完整示例:

    public static void getContactDetails(Context context, String number, int type) {
        String[] projection = new String[]{
                ContactsContract.PhoneLookup.DISPLAY_NAME,
                ContactsContract.PhoneLookup._ID,
                ContactsContract.PhoneLookup.LOOKUP_KEY,
                ContactsContract.PhoneLookup.PHOTO_URI,
                ContactsContract.CommonDataKinds.Phone.NUMBER};
        Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number.trim()));
    
        Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null);
    
        while (Common.nonNull(cursor) && cursor.moveToNext()) {
            String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.LOOKUP_KEY));
            String mobileNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
    
            if (mobileNumber.length() > 10) {
                mobileNumber = mobileNumber.substring(mobileNumber.length() - 10);
                if (mobileNumber.startsWith(number)) {
                    Log.e("I am found", "I am found " + mobileNumber + displayName);
                }
            }
    
        }
    
        cursor.close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      相关资源
      最近更新 更多