当前位置: 首页 > 知识库问答 >
问题:

无法对EditText字段(Android)进行setText()-NullPointerException[重复]

董永宁
2023-03-14

当我尝试对EditText进行setText()时,我总是得到这个错误,我看不出哪里出错了。我想了解这个错误背后的逻辑。我敢肯定这是件小事情,但它现在真的困扰着我。

01-25 10:20:44.267 143 25-14325/com.example.gregsquibbs.greg_squibbs_todoapp3 E/androidruntime:致命异常:main process:com.example.gregsquibbs.gregsquibbs.greg_squibbs_todoapp3,pid:14325 java.lang.runtimeexception:无法启动活动ComponentInfo{在Android.app.activitythread.performLaunchActivity(activitythread.java:2817)在Android.app.activitythread.handlelaunchActivity(activitythread.java:2892)在Android.app.activitythread.-Wrap11(未知源:0)在Android.app.activitythread.$h.handleMessage(activitythread.java:1593)在Android.os.handler.dispatchMessage(handler.java:105)在(activitythread.java:6541)位于java.lang.reflect.method.inv在com.android.internal.os.zygote$methodandargscaller.run(zygoteinit.main(zygoteinit.java:767)处的oke(本机方法),原因是:java.lang.nullpointerException:试图在squibbs_todoapp3.editTodo.editTodoActivity.onCreate(editTodoActivity.java:41)在Android.app.activity.performCreate(activity.java:6975)在Android.app.instrumentation.CallActivityonCreate(instrumentation.java:1213)在Android.app.activityThread.performLaunchActivity(activityThread.java:2770)在Android.app.activityThread.handleLaunchActivity(在Android.app.activitythread.-Wrap11(未知来源:0) 在Android.app.activitythread$h.handleMessage(activitythread.java:1593) 在Android.os.handler.DispatchMessage(Handler.java:105) 在Android.os.looper.loop(looper.java:164) 在Android.app.activitythread.main(activitythread.java:6541) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.zygote$methodandargscaller.run(zygote.java:240)在com.android.internal.os.zygoteinit.main(zygoteinit.java:767)

这就是我创建etMessage并使用setText()的地方

public class EditTodoFragment extends Fragment implements EditTodoContract.View {

private EditTodoContract.Presenter presenter;
private EditText etMessage;


public EditTodoFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.edit_todo_fragment, container, false);

    System.out.println("Step 2 - Fragment check");
    etMessage = (EditText) view.findViewById(R.id.etMessage);


    return view;
}

public void setPresenter(EditTodoContract.Presenter todoPresenter) {
    this.presenter = todoPresenter;
}

public String getMessage() {
    String message = etMessage.getText().toString();
    return message;
}

public void setMessage(String message) {
    etMessage.setText(message);
}

}

下面是XML文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.gregsquibbs.greg_squibbs_todoapp3.EditTodo.EditTodoActivity">


<EditText
    android:id="@+id/etMessage"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:background="@drawable/rect"
    android:ems="10"
    android:gravity="top"
    android:inputType="textShortMessage" />

<Button
    android:id="@+id/bSave"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Save"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:onClick="saveButtonClicked"
    android:layout_gravity="center_horizontal|bottom"


    />
public class EditTodoActivity extends AppCompatActivity {
private String message;
private int position;
private EditTodoFragment editTodoFragment;
private EditTodoPresenter editTodoPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_todo_activity);

    System.out.println("Step 1");

    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.contentFrameContainer);

    if (fragment == null){
        editTodoFragment = new EditTodoFragment();
        fm.beginTransaction()
                .add(R.id.contentFrameContainer, editTodoFragment)
                .commit();
        editTodoPresenter = new EditTodoPresenter(editTodoFragment);
    }


    message = getIntent().getStringExtra(IntentConstants.INTENT_MESSAGE_DATA);
    position = getIntent().getIntExtra(IntentConstants.INTENT_ITEM_POSITION, -1);
    editTodoFragment.setMessage(message);

}

public void saveButtonClicked(View v) {
    if(editTodoFragment.getMessage().equals("")) {
    } else {
        String changedMessage = (editTodoFragment.getMessage());
        Intent intent = new Intent();
        intent.putExtra(IntentConstants.INTENT_CHANGED_MESSAGE, changedMessage);
        intent.putExtra(IntentConstants.INTENT_ITEM_POSITION, position);
        finish();
    }
}
        etMessage = (EditText) view.findViewById(R.id.messageField);

我不知道这是否与此事有关。

共有1个答案

司徒修能
2023-03-14

错误可能是您在edit_todo_fragment之外的其他文件中定义了etmessage。这就是为什么您没有得到编译错误,因为对etmessage的引用存在,但它不存在于膨胀的视图中,因此您得到了NPE。

 类似资料:
  • 有没有人知道如何让它工作,以便它可以在字段中键入文本?

  • 可能重复: 将edittext限制为单行 我有两个编辑文本。我的问题是,当我按下键盘上的enter键时,它会创建另一组行。或者像编辑文本中的下一行一样创建。我想删除它,我想它是在一行。即使我在键盘上输入enter键,它仍然不会创建下一行。 你是怎么做到的?

  • 如何在android中编写这些新材质设计文本字段? EditText看起来不是那样的,对吧? 谢谢你的帮助!

  • 问题内容: 当我循环时。要设置文本,我首先需要删除监听器,然后再次设置监听器。如何使用 RxJava 做到这 一点 ? 问题答案: 当我循环时。要设置文本,我首先需要删除监听器,然后再次设置监听器。如何使用 RxJava 做到这 一点 ? 为了满足要求,我设法如下扩展RxBinding源代码。 : : 用法 :

  • 我正在制作一个用于存储笔记的Android应用程序。在单击按钮之前,我已使editText的行为类似于textView。单击edit按钮可使editText取值。现在,当我保存该值并将其显示时,问题就出现了。EditText不是我想要的多行,而是一行。 我在xml文件中将editText的inputType属性声明为多行,但在初始化editText的代码中,我将其inputType属性设置为nul

  • JavaFx文本字段。setText()方法不工作当从另一个线程调用时,我正在从另一个线程调用received()方法。但我无法将文本设置为文本字段,所以我使用了平台。稍后运行,但它不起作用。 DepartmentsController是我的控制器类,它接收了从另一个线程调用的方法(kryonet thread kryonet是一个高级网络库)。 我有主类,是启动的javafx应用程序,初始化控制

  • 问题内容: 这个问题已经在这里有了答案 : Python If == true语句仅在readline的最后一行有效 (1个答案) 2年前关闭。 我试图将我的一行与一个字符串进行比较,但是这行不通。我正在读取一个html文件,我需要解析该文件以将该部分发送到字典,但是当我使用if将行之一与字符串进行比较时,匹配时不会返回True。 这是代码: 问题答案: 我认为这是因为它尝试读取字符串中的换行符: