繁体   English   中英

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

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

我有一个EditText ,只要我把它放在带有!= nullif 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM