2017-01-18 10 views
1

У меня есть EditText, который, когда я помещаю его в if statement с != null, Android Studio предупреждает меня, что значение всегда будет правдой.Почему значение EditText (не null) всегда верно?

Я пробовал отладку, и он продвигается до if block, даже если я ничего не набрал в EditText.

Вот пример:

EditText emailEditText = (EditText) findViewById(R.id.profile_email_edit_text); 

if (emailEditText.getText().toString() != null) { // Android studio warning (Condition 'emailEditText.getText().toString() != null' is always 'true') 

    Toast.makeText(this, "Not equal to null passed", Toast.LENGTH_SHORT).show(); 

    // toast message appears when I try it 
} 

Обратите внимание, что если я использую .equals("") вместо этого, никаких проблем не бывает.

Почему это происходит?

+0

почему не нравится, что я не знаю, в чем проблема –

+0

EditText всегда будет иметь текст, если ни один не введен, то это будет строка emptry "". – Gudin

+0

хорошо, что помогли опубликовать в качестве ответа так, чтобы я один вы подняли –

ответ

2

emailEditText.getText().toString() не вернется null. Таким образом, NPE не имеет шансов для следующего метода. getText вернет пустую строку если нет нет строки, которая, безусловно, не null

Однако EditText самих по себе может быть null если не инициализирован!

Таким образом, вы можете проверить, что погода пуста или нет, и выполняйте свою задачу! У вас есть много вариантов ..

emailEditText.getText().toString().matches("") 

emailEditText.getText().toString().trim().equals("") 

emailEditText.getText().toString().trim().length() > 0 

TextUtils.isEmpty(emailEditText.getText().toString()) // .toString(); is not required as @waqaslam pointed out 
+0

, вам не нужно вызывать toString() на getText() при использовании TextItils.isEmpty – waqaslam

+0

, что правильно @waqaslam –

+0

@waqaslam bah мое плохое обновление, спасибо за разделение –

2

EditText#getText никогда не будет возвращать null, поэтому Editable#toString не будет возвращать null.

Он вернет String, содержащий символы, которые находятся в EditText. Если символов нет, он вернет пустой String.

Пустой String ("") не является null.

Интересно, что если вы попробуете EditText#setText(null), будет установлен пустой String.

Ваше состояние должно быть (!emailEditText.getText().toString().isEmpty())

2

EditText всегда возвращает пустую строку вместо нулевого даже при вызове setText(null).

Следовательно, вы должны использовать TextUtils.isEmpty(), чтобы ваше состояние работало.

1

При создании EditText он содержит строку "" по умолчанию. Поэтому, когда вы даете edittext.getText().toString!=null, он возвращает "", который не является null. Следовательно, ваше состояние if всегда true.

Вместо этого, если вы хотите, чтобы это было ложным для этого условия, используйте if(edittext.getText().toString().equals("")).

 Смежные вопросы

  • Нет связанных вопросов^_^