所以我在测试,我来找一个问题。 以下是检索文本的方法
public void SetName(){
try{
EditText editText = new EditText(MainActivity.getAppContext());
editText = editText.findViewById(R.id.idExample);
name = editText.getText().toString();
}catch (Exception e){Toast.makeText( MainActivity.getAppContext() , "error", Toast.LENGTH_LONG).show();
e.printStackTrace();}
}
当我进行测试以了解为什么会出现以下错误时
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
我认为这与我如何描述上下文有关
protected void onCreate(Bundle savedInstanceState) {
MainActivity.appContext = getApplicationContext();
}
public static Context getAppContext() {
return appContext;
}
但如果是问题我不知道怎么解决
编辑文本对象
<EditText
android:id="@+id/idExample"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="Name"
android:ems="10"
android:hint="@string/name"
android:inputType="text"
android:text="@string/string" />
问题就在这里,执行的是第一个edittext,而不是第二个,因此请确保删除这一行代码
editText editText=新的editText(mainactivity.getAppContext());
try{
EditText editText = findViewById(R.id.idExample);
name = editText.getText().toString();
}catch (Exception e){Toast.makeText( MainActivity.getAppContext() , "error", Toast.LENGTH_LONG).show();
e.printStackTrace();}
}
在XML中为edittext
定义的Id是idexample
,但您正在使用Id作为idexamble
将r.Id.idexamble
更改为r.Id.idexample
这可能是因为editText对象由于某种原因为空,请尝试在mainactivity类的顶部声明editText
,然后在onCreate方法中使用editText=editText.FindViewById(r.id.idexamble);
,然后调用useeditText