提问者:小点点

为什么EditText对象没有获取文本


所以我在测试,我来找一个问题。 以下是检索文本的方法

    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" />

共3个答案

匿名用户

问题就在这里,执行的是第一个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作为idexambler.Id.idexamble更改为r.Id.idexample

匿名用户

这可能是因为editText对象由于某种原因为空,请尝试在mainactivity类的顶部声明editText,然后在onCreate方法中使用editText=editText.FindViewById(r.id.idexamble);,然后调用useeditText