62

在整个网络上,我都看到了类似edittext.getText().toString(). 我没有看到任何空检查。在文档中,我没有看到任何声明这永远不会为空。

不过,观察结果说明了什么?这会返回 null 吗?

4

7 回答 7

71

getText()不会回来null。所以在下面的方法中NPE是没有机会的。getText如果没有字符串,则将返回空字符串,这绝对不是null

getText().toString();

但是如果没有正确初始化edittext本身可能会发生null,因此以下将触发NPE

editText.getText().toString();
于 2013-10-25T13:02:33.420 回答
32

更新:

截至 2018 年 1 月 18 日,它确实出现了,这现在是可能的

旧答案:

不,EditText.getText()永远不会回来null。验证这一点的一种方法是检查 Android 源代码EditText.getText()

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 源代码,我们看到它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()can never return null,因为一旦 anEditText被构造,mText就会被赋予一个空字符串的值。

但是,正如 StinePike 指出的那样,EditText.getText()如果您的 EditTextnull在调用getText().

于 2014-01-10T16:20:32.483 回答
10

使用Android P SDK,它在AppCompatEditText类中被注释为可为空,因此它可以返回 null。

文档中

返回视图正在显示的文本。如果尚未设置可编辑文本,则返回 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();
}
于 2018-07-24T19:40:18.967 回答
1

我不这么认为它会永远回来null

但是如果你想检查返回的文本是否为空,我建议使用TextUtils.isEmpty()方法

编辑:- 文档没有说明有关返回值的任何内容。从我在源代码中看到的是,当您初始化 EditText 时,默认文本值设置为"". 所以它永远不会回来null

于 2013-10-25T12:58:26.293 回答
1

它将返回 null,因为当应用程序运行它为空并返回 null 时,请在按钮单击侦听器中使用 .getText.toString,现在当您单击按钮时,它将获取您在 editText 上输入的文本。

于 2017-06-20T21:22:49.513 回答
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或者你可以直接在你里面调用它onCreate()。像这样:

onCreate (){
      ….............
     btn = (Button)findViewById(R.id.firstButton);
     btn.setOnClickListener(new View.OnClickListener()
     {
         @Override
         public void onClick(View v)
         {
                String editTextValue= edittext.getText().toString();
                ..... 
         }
     });

}

我希望它会有所帮助!

于 2019-12-27T04:17:51.933 回答
-8

以这种方式尝试

String edittext = edittext.getText().toString();
if(edittext.length==0){ Log.d("null","the valueis null")};
于 2013-10-25T12:57:32.573 回答