EditText.getText()是否会返回null?

时间:2013-10-25 12:54:13

标签: android android-edittext

我在整个网络上看到edittext.getText().toString()等示例。我没有看到任何空检查。在文档中,我没有看到任何声明,它永远不会为空。

但是,观察结果表明了什么;这是否会返回null?

7 个答案:

答案 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源代码:

EditText.java显示:

public Editable getText() {
    return (Editable) super.getText();
}

EditText extends TextView起,对super.getText()的调用必须为TextView.getText()。现在我们转到TextView.getText()以查看它返回的内容:

TextView.java显示:

public CharSequence getText() {
    return mText;
}

现在我们需要知道mText是否可以为空。

深入研究TextView.java源代码,我们看到mTextTextView构造函数中初始化为空字符串:

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,因为只要构造EditTextmText就会得到一个空字符串的值。< / 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")};