在整个网络上,我都看到了类似edittext.getText().toString()
. 我没有看到任何空检查。在文档中,我没有看到任何声明这永远不会为空。
不过,观察结果说明了什么?这会返回 null 吗?
在整个网络上,我都看到了类似edittext.getText().toString()
. 我没有看到任何空检查。在文档中,我没有看到任何声明这永远不会为空。
不过,观察结果说明了什么?这会返回 null 吗?
getText()
不会回来null
。所以在下面的方法中NPE是没有机会的。getText
如果没有字符串,则将返回空字符串,这绝对不是null
getText().toString();
但是如果没有正确初始化edittext本身可能会发生null
,因此以下将触发NPE
editText.getText().toString();
更新:
截至 2018 年 1 月 18 日,它确实出现了,这现在是可能的。
旧答案:
不,EditText.getText()
永远不会回来null
。验证这一点的一种方法是检查 Android 源代码EditText.getText()
:
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()
can never return null
,因为一旦 anEditText
被构造,mText
就会被赋予一个空字符串的值。
但是,正如 StinePike 指出的那样,EditText.getText()
如果您的 EditTextnull
在调用getText()
.
使用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();
}
我不这么认为它会永远回来null
。
但是如果你想检查返回的文本是否为空,我建议使用TextUtils.isEmpty()
方法
编辑:- 文档没有说明有关返回值的任何内容。从我在源代码中看到的是,当您初始化 EditText 时,默认文本值设置为""
. 所以它永远不会回来null
它将返回 null,因为当应用程序运行它为空并返回 null 时,请在按钮单击侦听器中使用 .getText.toString,现在当您单击按钮时,它将获取您在 editText 上输入的文本。
只是因为你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();
.....
}
});
}
我希望它会有所帮助!
以这种方式尝试
String edittext = edittext.getText().toString();
if(edittext.length==0){ Log.d("null","the valueis null")};