[英]Why does the value of an EditText (not null) always true?
我有一个EditText
,只要我把它放在带有!= null
的if statement
,Android Studio就会警告我该值始终为true。
我尝试调试,即使我在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
永远不会返回null
,因此Editable#toString
不会返回null
。
它将返回一个包含EditText
字符的String
。 如果没有字符,它将返回一个空String
。
空String
( ""
)不是null
。
有趣的是,如果你尝试EditText#setText(null)
,将设置一个空String
。
你的条件应该是(!emailEditText.getText().toString().isEmpty())
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
EditText
总是返回,而不是空空字符串,即使所谓setText(null)
。
因此,您应该使用TextUtils.isEmpty()
来使您的条件工作。
创建EditText
它默认包含字符串""
。 所以当你给edittext.getText().toString!=null
它返回""
,它不是null
。 因此,你的if
条件总是true
。
相反,如果你希望它对于那个条件是假的,请使用if(edittext.getText().toString().equals(""))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.