Может кто-нибудь сказать мне, почему это, если заявление всегда дает мне ложь?
Я пытаюсь сделать это, если заявление, чтобы дать мне правду, если я скажу слово "привет", но это дает мне ложь все время!! Может кто-нибудь, пожалуйста, скажите мне, почему? вот мой код:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
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));
TextView display=(TextView)findViewById (R.id.TOF);
String what_you_say = lv.getContext().toString();
if (what_you_say.contentEquals("hi") == true)
display.setText("True");
else
display.setText("false");
}
3 ответа
Заменить эту строку:
if (what_you_say.contentEquals("hi") == true)
С этой другой строкой:
if (what_you_say != null && what_you_say.trim().equalsIgnoreCase("hi"))
В этом случае вас интересует простое равенство строк, но это хорошая идея, чтобы принять некоторые дополнительные меры предосторожности: рассмотрение случая, когда строка имеет значение null, удаление лишних пробелов в начале и конце и игнорирование регистра, как правило, помогут. Чтобы увидеть разницу с равным содержанием, посмотрите этот пост.
what_you_say.equals("hi")
должно сработать. Также хорошей практикой является не допускать использования регистра в чем-то, что вы проверяете (если вы не хотите использовать конкретный случай). Так что вы должны сделать what_you_say.equalsIgnoreCase("hi")
Вы должны изменить свой if-оператор следующим образом:
if ("hi".equals(what_you_say))
или же
if ("hi".equalsIgnoreCase(what_you_say))
В зависимости от того, нужен ли вам чек для учета регистра.
Вы всегда должны выполнять сравнения строк таким образом, потому что это будет нулевым.
Возьмите следующие фрагменты кода:
if ("hi".equals(what_you_say)) // what_you_say is null will evaluate to false
if (what_you_say.equals("hi")) // what_you_say is null will cause NullPointerException
Лучше, если оператор if будет иметь значение false, а не вызывать NullPointerException
,