2012-03-09 43 views
-1

我想尝试制作一个android应用程序,我接受用户使用语音识别服务器的输入。我捕捉如下的ArrayList中的结果:ArrayList.contains(“text”)引发NullPointerException?

matches = data.getStringArrayListExtra(
        RecognizerIntent.EXTRA_RESULTS); 

比赛是全局声明:

ArrayList<string> matches; 

现在我要检查,如果用户已经说出一个特定的词。所以我这样做:

if(matches.contains("TextToBeDetected")) { } 

但线上方抛出一个NullPointerException。

请帮忙。

P.S是的,我是一个Java和Android新手。

+1

ArrayList 应该是ArrayList 。在你的getStringArrayListExtra方法中设置了什么匹配? – smcg 2012-03-09 16:14:59

+0

@Selvin:我认为你的意思是OP。对新手来说,这并不意味着什么。 – 2012-03-09 17:09:22

回答

0

您确定matches已分配?
试试这个,看看你的logcat输出:

if (matches == null) { 
    Log.d("YourAppName", "matches is null!"); 
} else if (matches.contains("TextToBeDetected")) { 
    Log.d("YourAppName", "matches does contain TextToBeDetected"); 
} else { 
    Log.d("YourAppName", "matches does not contain TextToBeDetected"); 
} 
+1

像这样的评论(不解决PO的问题)应该添加为评论,而不是答案。 – GETah 2012-03-09 16:15:53

+0

我想用户可能想要一些测试代码,因为他/她提到他/他是一个新手。 – 2012-03-09 16:17:51

+0

这给你一个很好的理由,在评论中回答,而不是回答:) – GETah 2012-03-09 18:23:59

1

这听起来好像getStringArrayListExtra将返回nullthe docs说,这将如果发现这样的ArrayList值),所以当你尝试matches.contains("TextToBeDetected")它失败,因为你试图解引用一个空引用。在使用之前,您需要检查getStringArrayListExtra的返回值以确保它不是null。例如: -

matches = data.getStringArrayListExtra(
        RecognizerIntent.EXTRA_RESULTS); 
// ... 
if (matches != null) { 
    if (matches.contains("TextToBeDetected")) { 
     // do something 
    } 
} 
0
​​

将返回()空,如果没有ArrayList的价值发现与以前添加putExtra项目或价值。在你的情况下,也许它返回null

1

如果你看到的文档Android.Content.Intent.GetStringArrayListExtra它说

先前与putExtra()或加入一个项目的null值,如果没有ArrayList的值找到。

您需要先检查列表是否为空,然后再将其设置为匹配。

相关问题