EditText.getText()是否返回null?

在网上,我看到像edittext.getText().toString()例子。 我没有看到任何空的检查。 在文档中,我没有看到任何声明,说这将永远不会是空的。

但是,这些观察结果是怎么说的呢? 这是否会返回null?

getText()不会返回null 。 所以NPE在下面的方法中是没有机会的。 getText将返回空string,如果没有string,这肯定不是null

 getText().toString(); 

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

 editText.getText().toString(); 

不, EditText.getText()永远不会返回null 。 validation这一点的一个方法是检查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是否可以为null。

深入研究TextView.java源代码,我们发现在TextView构造函数中, mText被初始化为一个空string:

 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被赋予一个空string的值。

但是 ,正如StinePike指出的那样,如果EditText在调用getText()时为null ,则EditText.getText()可能会导致NPE。

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

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

编辑: –文档没有说明有关返回的值。 从我在源代码中看到的是,当你初始化一个EditText时,默认的文本值被设置为"" 。 所以它永远不会返回null

它会返回null,因为当应用程序运行它的空,它返回null时,使用.getText.toString在一个button点击监听器,现在当你点击button,它会得到您在editText上input的文本。

试试这种方式

 String edittext = edittext.getText().toString(); if(edittext.length==0){ Log.d("null","the valueis null")};