Java 无法设置EditText字段(Android)的setText()-NullPointerException

Java 无法设置EditText字段(Android)的setText()-NullPointerException,java,android,oop,Java,Android,Oop,当我试图在EditText上设置Text()时,我总是会遇到这个错误,我看不出哪里出错了。我想了解这个错误背后的逻辑。我敢肯定这是件小事,但现在真的让我心烦 01-25 10:20:44.267 14325-14325/com.example.gregsquibbs.greg_squibbs_todoapp3 E/AndroidRuntime:致命异常:主 流程:com.example.gregsquibbs.greg_squibbs_todoapp3,PID:14325 java.lang.R

当我试图在EditText上设置Text()时,我总是会遇到这个错误,我看不出哪里出错了。我想了解这个错误背后的逻辑。我敢肯定这是件小事,但现在真的让我心烦

01-25 10:20:44.267 14325-14325/com.example.gregsquibbs.greg_squibbs_todoapp3 E/AndroidRuntime:致命异常:主 流程:com.example.gregsquibbs.greg_squibbs_todoapp3,PID:14325 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.gregsquibbs.greg_squibbs_todoapp3/com.example.gregsquibbs.greg_squibbs_todoapp3.EditTodoActivity}: java.lang.NullPointerException:尝试调用虚拟方法“void” android.widget.EditText.setText(java.lang.CharSequence)“”在空 对象引用 在 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) 位于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) 原因:java.lang.NullPointerException:尝试调用虚拟机 方法'void android.widget.EditText.setText(java.lang.CharSequence)' 关于空对象引用 在 com.example.gregsquibbs.greg_squibbs_todoapp3.EditTodo.editodofragment.setMessage(editodofragment.java:56) 在 com.example.gregsquibbs.greg_squibbs_todoapp3.EditTodo.edittoactivity.onCreate(edittoactivity.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(ActivityThread.java:2892) 位于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()的地方

}

这是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"


    />
}


编辑:在片段的这一行上

        etMessage = (EditText) view.findViewById(R.id.messageField);
当我将鼠标悬停在演员表(编辑文本)上时,它会显示

将'view.findViewById(R.id.messageField)'强制转换为'EditText'的冗余更少。。。(⌘F1) 此检查报告不必要的强制转换表达式


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

首先,您必须定义这个编辑文本属于witch视图 然后,在你膨胀你的观点之后,你应该这样做

    View view = inflater.inflate(R.layout.edit_todo_fragment, container, false);
    etMessage = view.findViewById(R.id.etMessage);
    etMessage.setText("your message...")
如果在前面调用set text,则会看到此错误

此视图(etMessage)不在
        etMessage = (EditText) view.findViewById(R.id.messageField);
    View view = inflater.inflate(R.layout.edit_todo_fragment, container, false);
    etMessage = view.findViewById(R.id.etMessage);
    etMessage.setText("your message...")
 message = getIntent().getStringExtra(IntentConstants.INTENT_MESSAGE_DATA);
 if (fragment == null){
    editTodoFragment = new EditTodoFragment();
    // 
    Bundle bundle = new Bundle();
    bundle.putInt(key, message);
    fragment.setArguments(bundle);

    fm.beginTransaction()
            .add(R.id.contentFrameContainer, editTodoFragment)
            .commit();
    editTodoPresenter = new EditTodoPresenter(editTodoFragment);
 }
Bundle bundle = this.getArguments();
if (bundle != null) {
    message = bundle.getString(key, defaultValue);
}
etMessage = (EditText) view.findViewById(R.id.etMessage);
etMessage.setText(message);