我需要在下面的光标语句中使用识别器的结果:
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来自识别器,当我说一个单词它转换为文本,但我需要一个真正的字符串设置来获取游标代码采取或??感谢
答案 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);