2017-01-18 86 views
1

我有一个EditText,无论何时我将它放入!= nullif statement,Android Studio都会警告我该值始终为真。为什么EditText(非null)的值总是正确的?

我试过调试,即使我在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("")代替,没有任何问题发生。

为什么会发生这种情况?

+0

为什么不喜欢我不知道什么是问题 –

+0

EditText将始终有一些文本,如果没有输入,那么它将是emptry字符串“”。 – Gudin

+0

好吧,帮助发布作为答案,让我你一起 –

回答

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 
+0

你不需要在使用TextItils.isEmpty时调用getText()的toString() – waqaslam

+0

这是正确的@waqaslam –

+0

@waqaslam bah我的坏病更新它感谢分享 –

2

EditText#getText永远不会返回null,所以Editable#toString将不会返回null

它将返回一个String,其中包含EditText中的字符。如果没有字符,它将返回一个空的String

空的String"")不是null

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

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

2

EditText称为setText(null)即使总是返回,而不是空字符串。

因此,您应该使用TextUtils.isEmpty()使您的病情有效。

1

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

取而代之的是,如果您希望它在该条件下为假,请使用if(edittext.getText().toString().equals(""))

相关问题