为什么 EditText 的值(非空)总是 true?

Why does the value of an EditText (not null) always true?

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

我试过调试,即使我在 EditText 中没有输入任何内容,它也会前进到 if block

这是一个例子:

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(""),则不会出现任何问题。

为什么会这样?

EditText#getText 永远不会 return 一个 null,所以 Editable#toString 不会 return 一个 null.

它将 return 一个 String 包含 EditText 中的字符。如果没有字符,它将 return 一个空 String.

String ("") 不是 null.

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

你的条件应该是(!emailEditText.getText().toString().isEmpty())

emailEditText.getText().toString()不会returnnull。所以在下面的方法中没有 NPE 的机会。 getText 将 return 空字符串 如果有 没有 字符串,这绝对不是 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

EditText 总是 return 空字符串而不是 null 即使调用 setText(null).

因此,您应该使用 TextUtils.isEmpty() 来使您的条件有效。

当您创建 EditText 时,它默认包含字符串 ""。所以当你给 edittext.getText().toString!=null 时,它 returns "" 而不是 null。因此,您的 if 条件始终是 true

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