【问题标题】:Android search contacts by phone number and contact name (Both in same time)Android通过电话号码和联系人姓名搜索联系人(两者同时)
【发布时间】:2017-08-16 19:46:01
【问题描述】:

我想用“LIKE”运算符同时通过电话号码和联系人姓名查询联系人,这是我的代码:

    ContentResolver contentResolver = context.getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1 AND (" + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " LIKE '" + query + "%' OR " + ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + query + "%' OR " + ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + query + "%' ) ", null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
    return cursor;

但我的代码不起作用,它崩溃了,android 说“data4”和“data1”列不存在。

【问题讨论】:

    标签: android


    【解决方案1】:

    使用下面的代码按姓名查找联系人

    public String findByName(Context context , String name) {  
       String result= 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()) {
                    result= c.getString(0);
                }
                c.close();
                if(result==null)
                    result= "This contact is not saved into your device";
                return result;
    }
    

    【讨论】:

      【解决方案2】:

      使用加载器获得最快的结果。

      public Loader<Cursor> getContactCursor(Context context, Bundle args) {
              Uri baseUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;  
              String filter = args != null ? args.getString("filter") : null;
              if (filter != null && filter.length() > 0) {
                  return new CursorLoader(context,baseUri, null, "(display_name LIKE ?) OR (data1 LIKE ?)", new String[]{"%" + filter + "%","%" + filter + "%"}, null);
              }else{
                  return new CursorLoader(context,baseUri, projection,null, null, null);
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 2021-05-14
        • 2011-03-05
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 2011-04-12
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多