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")};