ArrayList.contains ("text") выдает исключение NullPointerException? - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь создать приложение для Android, где я принимаю ввод от пользователя, используя сервер распознавания речи.Я собираю результаты в ArrayList следующим образом:

matches = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);

совпадения объявляются глобально как:

ArrayList<string> matches;

Теперь я хочу проверить, произнес ли пользователь конкретное слово.Поэтому я делаю это:

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

Но строка выше выдает исключение NullPointerException.

Пожалуйста, помогите.

PS Да, я новичок в Java и Android.

Ответы [ 5 ]

2 голосов
/ 09 марта 2012

Очевидно, что ваши совпадения равны нулю. Согласно документации о намерениях, http://developer.android.com/reference/android/content/Intent.html#getStringArrayListExtra%28java.lang.String%29 getStringArrayListExtra возвращает ноль, если ключ не найден в пакете.

Проверка на ничтожность перед проверкой, если она содержит что-либо

1 голос
/ 09 марта 2012

Если вы видите документы Android.Content.Intent.GetStringArrayListExtra В нем говорится

значение элемента, который ранее был добавлен с помощью putExtra (), или ноль, если значение ArrayList отсутствуетбыл найден.

Вам нужно проверить, чтобы список был нулевым, прежде чем устанавливать для него совпадения.

1 голос
/ 09 марта 2012

Звучит так, как будто getStringArrayListExtra возвращает null ( документы говорят, что будет, если будет найдено такое значение ArrayList), и поэтому при попытке matches.contains("TextToBeDetected") произойдет сбой, потому что вы Пытаешься разыменовать нулевую ссылку. Вы захотите проверить возвращаемое значение из getStringArrayListExtra, чтобы убедиться, что оно не null, прежде чем использовать его. E.g.:

matches = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
// ...
if (matches != null) {
    if (matches.contains("TextToBeDetected")) {
        // do something
    }
}
0 голосов
/ 09 марта 2012
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)

вернет значение элемента, ранее добавленного с помощью putExtra () или null, если значение ArrayList не найдено. В вашем случае, возможно, он вернул нуль

0 голосов
/ 09 марта 2012

Вы уверены, что выделено 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");
}
...