Java Android-识别器结果为空。。。需要将它们放入游标()中

Java Android-识别器结果为空。。。需要将它们放入游标()中,java,android,Java,Android,我需要识别器在下面的游标语句中显示结果: if (requestCode == check && resultCode == RESULT_OK){ ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); lv.setAdapter(new ArrayAdapter<String>(this, an

我需要识别器在下面的游标语句中显示结果:

 if (requestCode == check && resultCode == RESULT_OK){

        ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));

        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,      ContactsContract.Contacts.DISPLAY_NAME + "=?", new String[]{ results }, null); 
不接受我的“结果”字符串,因为它是arraylist变量而不是字符串。。。reults来自识别器,当我说一个单词时,它会转换为文本,但我需要一个真正的字符串集来获取光标代码,或者??谢谢

试试这个:

startmanagingCursor(cur);
cur.moveToFirst();

以下是您可以做的:

1如果您的结果仅为一个联系人,并且结果仅包含一项

 Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
    ContactsContract.Contacts.DISPLAY_NAME + "=?",
      new String[]{ results.get(0) }, null);
2现在看看你的逻辑,你正试图获得用户所说的所有联系人。因此,如果结果包含多个项,则结果似乎包含名字、姓氏等。您应该将选择参数字符串构建为

StringBuilder selectionArgStr = new StringBuilder();
for(String word : results) { 
   selectionArgStr.append(word);
   selectionArgStr.append(" ");
}

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
   ContactsContract.Contacts.DISPLAY_NAME + "=?",
     new String[]{ selectionArgStr.toString() }, null);
3如果结果包含不同人员的不同姓名,则我们需要构建选择字符串,而不是:

StringBuilder selectionStr = new StringBuilder();
int resultLen = results.size();
for(int i=0; i<resultLen; i++) { 
   selectionStr.append(ContactsContract.Contacts.DISPLAY_NAME);
   selectionStr.append("=?");
   if(i>0 && i<(resultLen -1)) // Put OR only if there are more than one
     selectionStr.append(" || ");
}


Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
   selectionStr,
     (String [])results.toArray(), null);

问题到底是什么?从识别器获取null还是无法形成查询字符串?你能说得更清楚些吗?我重拨了代码eaxmples和一些有问题的文本,以帮助你说得更清楚些。谢谢我怎样才能让它忽略结果的大小写?我认为结果应该是全小写的?不是吗?是的,对不起。可能需要将结果与电话表进行比较,然后拨打最近的匹配电话,询问其是否正确。因此,如果我们有结果Susan,并且我们的联系人中有一个Susan,它将调用它,否则显示需要选择的选项…即使他们是姓或名。。我想它必须搜索两个字段。。新问题。。你帮了大忙=我认为姓名应该包括名字和姓氏。因此,您可以尝试使用sql-like关键字而不是=像这样:?:Cursor cur=cr.queryContactsContract.Contacts.CONTENT\u URI,null,ContactsContract.Contacts.DISPLAY\u NAME+=,新字符串[]{results.get0},null;>Cursor cur=cr.queryContactsContract.Contacts.CONTENT_URI,null,ContactsContract.Contacts.DISPLAY_NAME+like,新字符串[]{results.get0},null??非常感谢。
StringBuilder selectionStr = new StringBuilder();
int resultLen = results.size();
for(int i=0; i<resultLen; i++) { 
   selectionStr.append(ContactsContract.Contacts.DISPLAY_NAME);
   selectionStr.append("=?");
   if(i>0 && i<(resultLen -1)) // Put OR only if there are more than one
     selectionStr.append(" || ");
}


Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
   selectionStr,
     (String [])results.toArray(), null);