为什么 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(""))
。
我有一个 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(""))
。