简体   繁体   English

在片段上使用setter时发生NullPointerException

[英]NullPointerException while using a setter on fragment

I have been trying to debug this for a while and i am not able to figure out why i am getting the NullPointerException while trying to use the setter of an object on my fragment. 我已经尝试调试了一段时间,但我无法弄清为什么在尝试在片段上使用对象的setter时出现NullPointerException的原因。

Fragment Code: 片段代码:

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

public class ExerciseFragment extends ListFragment {

    private ExerciseDetails mExercise;
    private ArrayList<NewSet> mSets;
    private String mName;

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

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.new_exercise_fragment, container,
                false);

        Bundle b = getArguments();
        mName = b.getString("NAME");
        mExercise.setName(mName);
        getActivity().setTitle(mName);
        ListView lv = (ListView) rootView.findViewById(android.R.id.list);



        return rootView;
    }


}

Class containing the setter i need to use: 包含setter的类,我需要使用:

import java.util.ArrayList;
import java.util.Date;

public class ExerciseDetails {


    private String mName;
    private Date mDate;
    private ArrayList<NewSet> mSets;

    public ExerciseDetails() {

        mName = "";
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public Date getDate() {
        return mDate;
    }

    public void setDate(Date date) {
        mDate = date;
    }


    public ArrayList<NewSet> getSets() {
        return mSets;
    }

    public void setSets(ArrayList<NewSet> sets) {
        mSets = sets;
    }

}

This is the line that cuases the nullpointerexception: 这是引起nullpointerexception的行:

mExercise.setName(mName);

The error trace: 错误跟踪:

12-08 23:34:27.610: E/AndroidRuntime(791): Process: com.test.project, PID: 791
12-08 23:34:27.610: E/AndroidRuntime(791): java.lang.NullPointerException
12-08 23:34:27.610: E/AndroidRuntime(791):  at com.test.project.ExerciseFragment.onCreateView(ExerciseFragment.java:33)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.os.Handler.handleCallback(Handler.java:733)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.os.Handler.dispatchMessage(Handler.java:95)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.os.Looper.loop(Looper.java:137)
12-08 23:34:27.610: E/AndroidRuntime(791):  at android.app.ActivityThread.main(ActivityThread.java:4998)
12-08 23:34:27.610: E/AndroidRuntime(791):  at java.lang.reflect.Method.invokeNative(Native Method)
12-08 23:34:27.610: E/AndroidRuntime(791):  at java.lang.reflect.Method.invoke(Method.java:515)
12-08 23:34:27.610: E/AndroidRuntime(791):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-08 23:34:27.610: E/AndroidRuntime(791):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-08 23:34:27.610: E/AndroidRuntime(791):  at dalvik.system.NativeStart.main(Native Method)

mExercise is NULL . mExercise为NULL Initialize it with creating new object: 通过创建新对象对其进行初始化:

mExercise=new ExerciseDetails();
mExercise.setName(mName);

mExercise is NULL. mExercise为NULL。

Initilaize it like 像这样初始化

ExerciseDetails mExercise=new ExerciseDetails();

and then use 然后使用

mExercise.setName(mName); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM