为什么EditText(非null)的值始终为true?

时间:2017-01-18 15:05:58

标签: java android null android-edittext equals

我有一个EditText,每当我将if statement放入!= null时,Android Studio会警告我该值始终为真。

我尝试了调试,即使我在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("")代替,则不会出现问题。

为什么会这样?

4 个答案:

答案 0 :(得分:2)

EditText#getText永远不会返回null,因此Editable#toString不会返回null

它将返回包含String中字符的EditText。如果没有字符,则会返回空的String

String"")不是null

有趣的是,如果您尝试EditText#setText(null),则会设置空的String

您的情况应为(!emailEditText.getText().toString().isEmpty())

答案 1 :(得分: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

答案 2 :(得分:2)

即使调用EditText

setText(null)也始终返回空字符串而不是 null

因此,您应该使用TextUtils.isEmpty()来使您的病情发挥作用。

答案 3 :(得分:1)

创建EditText时,默认情况下它包含字符串""。因此,当您提供edittext.getText().toString!=null时,它会返回"",而不是null。因此,if条件始终为true

相反,如果您希望该条件为false,请使用if(edittext.getText().toString().equals(""))