我在整个网络上看到edittext.getText().toString()
等示例。我没有看到任何空检查。在文档中,我没有看到任何声明,它永远不会为空。
但是,观察结果表明了什么;这是否会返回null?
答案 0 :(得分:64)
getText()
不会返回null
。因此NPE在以下方法中没有机会。如果没有字符串,getText
将返回空字符串,绝对不是null
getText().toString();
然而,如果没有正确初始化,edittext本身可以是null
,因此以下内容将触发NPE
editText.getText().toString();
答案 1 :(得分:24)
<强>更新强>
它确实出现在2018年1月18日,这是now possible。
OLD ANSWER:
不,EditText.getText()
永远不会返回null
。验证这一点的一种方法是检查EditText.getText()
的Android源代码:
public Editable getText() {
return (Editable) super.getText();
}
自EditText extends TextView
起,对super.getText()
的调用必须为TextView.getText()
。现在我们转到TextView.getText()
以查看它返回的内容:
public CharSequence getText() {
return mText;
}
现在我们需要知道mText
是否可以为空。
深入研究TextView.java源代码,我们看到mText
在TextView
构造函数中初始化为空字符串:
public TextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mText = "";
…
}
一旦我们看到EditText
构造函数调用TextView
构造函数:
public EditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
我们可以有把握地断定EditText.getText()
永远不会返回null
,因为只要构造EditText
,mText
就会得到一个空字符串的值。< / p>
然而,正如StinePike指出的那样,如果您的EditText在调用EditText.getText()
时为null
,则getText()
可能会导致NPE。
答案 2 :(得分:4)
使用 Android P SDK时,它在AppCompatEditText
类中被标注为可空,因此可以返回空。
并且来自the docs:
返回视图显示的文本。如果尚未设置可编辑的文本,则将返回null。
@Override
@Nullable
public Editable getText() {
if (Build.VERSION.SDK_INT >= 28) {
return super.getText();
}
// A bug pre-P makes getText() crash if called before the first setText due to a cast, so
// retrieve the editable text.
return super.getEditableText();
}
答案 3 :(得分:1)
我不这么认为它会永远归还null
。
但是如果你想检查返回的文本是否为空,我建议使用TextUtils.isEmpty()
方法
编辑: - 文档未说明有关返回值的任何内容。从我在源代码中看到的是,当您初始化EditText时,默认文本值设置为""
。所以它永远不会返回null
答案 4 :(得分:1)
它将返回null,因为当应用程序运行其空并返回null时,在按钮单击侦听器中使用.getText.toString,现在当您单击按钮时,它将获取您在editText上输入的文本。
答案 5 :(得分:0)
这仅仅是因为您的edittext.getText().toString()
直接在onCreate()
中被调用...
这就是为什么它返回editText的初始值的原因。
您只需要从onCreate()
中创建一个函数,然后在事件监听器中调用它即可。
onCreate (){
….............
btn = (Button)findViewById(R.id.firstButton);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
getValue ()
}
});
}
public void getValue () {
String editTextValue= edittext.getText().toString();
......
}
或者您可以在onClickListenner
的{{1}}中直接调用它。
像这样:
onCreate()
我希望这会有所帮助!
答案 6 :(得分:-8)
以这种方式尝试
String edittext = edittext.getText().toString();
if(edittext.length==0){ Log.d("null","the valueis null")};