带阵列的android语音识别

时间:2013-03-05 20:25:07

标签: java android voice-recognition

我正在尝试制作一个Android应用程序

  • 用户说了一个字
  • 此字词将保存到变量what_you_say
  • 如果它与我已存储在数组中的内容相匹配,则用户将说出第二个短语

......等等。问题是,我创建了一个数组,并在其中存储了我希望程序比较用户所说的单词的字样,但它不起作用!它一直给我假,我不知道为什么。这是我的代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (requestCode ==check && resultCode == RESULT_OK){                       // voice to text 

TextView display2=(TextView)findViewById (R.id.TOF);

String[] words = { "zero", "one", "two" };  
for (int w=0;w<3;w++)
{
    ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
     for(int j=0;j<results.size();j++) {

        String what_you_say = results.get(j);  
         if (what_you_say.equalsIgnoreCase(words[w]))
             display2.setText("true, continue dear");
             //System.out.println("true, continue");
         else
         {
             display2.setText("False, repeat again");
           //System.out.println("False, repeat again");
         }
     }
} 
}//end of for
super.onActivityResult(requestCode, resultCode, data);

}}

1 个答案:

答案 0 :(得分:3)

指数从 0 开始,而不是 1 。你得到一个 ArrayIndexOutOfBoundsException

将其更改为:

String[] words = { "zero", "one", "two" };  
for (int w=0;w<3;w++)
{
     for(int j=0;j<results.size();j++) {
         what_you_say = results.get(j);  
         if (what_you_say.equalsIgnoreCase(words[w]))
            System.out.println("true, continue");
         else
         {
           System.out.println("False, repeat again");
         }
     }
} 

另请注意,如果您在循环中没有要求what_you_say,并且说它等于zero,那么您的输出将为:

  

是的,继续

     

错误,再次重复

     

错误,再次重复

我认为你的意思是在循环的每次迭代中要求what_you_say。 (代码已编辑