Android - 识别器结果为null ...需要将它们放入游标()

时间:2012-01-07 22:27:41

标签: java android

我需要在下面的光标语句中使用识别器的结果:

 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); 

问题是下面的'结果':

 ContactsContract.Contacts.DISPLAY_NAME + "=?", new String[]{ results }, null); 

不接受我的'结果'字符串,因为它是一个arraylist变量而不是字符串... reults来自识别器,当我说一个单词它转换为文本,但我需要一个真正的字符串设置来获取游标代码采取或??感谢

2 个答案:

答案 0 :(得分:0)

试试这个:

startmanagingCursor(cur);
cur.moveToFirst();

答案 1 :(得分:0)

以下是您可以做的事情:

1)如果您的结果只是一个联系人而且results只包含一个项目。

 Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
    ContactsContract.Contacts.DISPLAY_NAME + "=?",
      new String[]{ results.get(0) }, null);

2)现在看看你的逻辑,你正试图让用户说话的所有联系人。因此,如果结果包含多个项目,则看起来结果包含名字,姓氏等。您应该将选择arg字符串构建为

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);