尝试从主

时间:2017-02-01 23:05:59

标签: java android android-fragments nullpointerexception

我正在尝试创建一个在一个片段中列出城市的应用,点击后,在另一个片段中打印一个简短描述。

以下是具有updateDescription函数的描述类:

public class Description extends Fragment {

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


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    setRetainInstance(true);
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.description_fragment   , container, false);
}

public void updateDescription(String text){
    TextView textView = (TextView) getView().findViewById(R.id.text_to_be_updated);
    textView.setText(text);

}

}

这是该类的.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"
android:id="@+id/des_layout"
tools:context="com.example.connormclean.lab3.Description">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="146dp"
    android:id="@+id/text_to_be_updated"
    android:textSize="25sp"
    android:layout_gravity="center"
    android:text="@string/frag_test"
    android:textAlignment="center"
    android:textColor="@android:color/black" />

这导致此错误:

  E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.connormclean.lab3, PID: 3903
              java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.connormclean.lab3.Description.updateDescription(java.lang.String)' on a null object reference
                  at com.example.connormclean.lab3.MainActivity.sendText(MainActivity.java:47)
                  at com.example.connormclean.lab3.City_list.getDescription(City_list.java:91)
                  at com.example.connormclean.lab3.City_list$1.onItemClick(City_list.java:46)
                  at android.widget.AdapterView.performItemClick(AdapterView.java:310)
                  at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
                  at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042)
                  at android.widget.AbsListView$3.run(AbsListView.java:3879)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

任何建议或解决方案将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:1)

堆栈跟踪中的这一行指出了答案:

override func shake() {
    print("Shake")
}  

错误发生在java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.connormclean.lab3.Description.updateDescription(java.lang.String)' on a null object reference at com.example.connormclean.lab3.MainActivity.sendText(MainActivity.java:47) 的第47行,您未在问题中提及。您要调用的对象MainActivity为null。在那里寻找问题。你可能忘了正确地初始化它。

答案 1 :(得分:0)

从调用updateDescription(String text)方法的位置开始,在创建视图后调用它。如果在创建视图之前调用它,那么您将获得NullPointerException。