Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-通过模糊/近似/相似匹配查找联系人_Android_Android Contacts_Android Contentresolver - Fatal编程技术网

Android-通过模糊/近似/相似匹配查找联系人

Android-通过模糊/近似/相似匹配查找联系人,android,android-contacts,android-contentresolver,Android,Android Contacts,Android Contentresolver,有多种方法可以通过显示名称查找联系人。例如,这个答案 但我需要找到模糊匹配的联系人。例如,如果找不到“Kim”,我需要返回名为“Keem”的联系人 我如何做到这一点?没有构建API可以对显示名称进行模糊搜索,但您可以自己完成,应该不会那么难: 从数据库中读取所有联系人的姓名 使用类似于Jaro Winkler的相似性字符串比较算法与请求的名称进行比较 返回最佳匹配 对于第一步,以下是代码: Map<String, Long> contacts = new HashMap<Str

有多种方法可以通过显示名称查找联系人。例如,这个答案

但我需要找到模糊匹配的联系人。例如,如果找不到“Kim”,我需要返回名为“Keem”的联系人


我如何做到这一点?

没有构建API可以对显示名称进行模糊搜索,但您可以自己完成,应该不会那么难:

  • 从数据库中读取所有联系人的姓名
  • 使用类似于Jaro Winkler的相似性字符串比较算法与请求的名称进行比较
  • 返回最佳匹配
  • 对于第一步,以下是代码:

    Map<String, Long> contacts = new HashMap<String, Long>();
    
    String[] projection = {Contacts._ID, Contacts.DISPLAY_NAME};
    // use null if you want to include hidden contacts
    String selection = Contacts.IN_VISIBLE_GROUP + "=1"; 
    Cursor cur = cr.query(Contacts.CONTENT_URI, projection, selection, null, null);
    
    while (cur != null && cur.moveToNext()) {
        long id = cur.getLong(0);
        String name = cur.getString(1);
        contacts.put(name, id);
    }
    if (cur != null) {
        cur.close();
    }
    
    Map contacts=newhashmap();
    字符串[]投影={Contacts.\u ID,Contacts.DISPLAY\u NAME};
    //如果要包括隐藏联系人,请使用null
    字符串选择=Contacts.IN_VISIBLE_GROUP+“=1”;
    Cursor cur=cr.query(Contacts.CONTENT\u URI,投影,选择,null,null);
    while(cur!=null&&cur.moveToNext(){
    long id=cur.getLong(0);
    字符串名称=cur.getString(1);
    联系人。put(姓名、id);
    }
    如果(cur!=null){
    cur.close();
    }
    
    对于步骤2,您可以使用Jaro Winkler或其他字符串距离算法,这里有一个库可以帮助您: