我有一个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("")
代替,则不会出现问题。
为什么会这样?
答案 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(""))
。