Android + java.lang.NullPointerException: attempt to call an interface method

When compiling my code, I get this error ("java.lang.NullPointerException: attempt to call the interface method"), and I still can not understand why.

Here is my code:

    public class FragmentDetails extends Fragment {

        private TextView text1, text2, text3, text4, text5 = null;
        private Button button1 = null;


        OnDetailsDefinedListener mCallback;

        public interface OnDetailsDefinedListener {
            void executeOrder(String a, String b, String c, String d, String e);
        }


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

            rootView = inflater.inflate(R.layout.fragment_details, container, false);

            button1 = (Button) rootView.findViewById(...);

            button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                text1 = getActivity().findViewById(...);
                text2 = getActivity().findViewById(...);
                text3 = getActivity().findViewById(...);
                text4 = getActivity().findViewById(...);
                text5 = getActivity().findViewById(...);

                String a = text1.getText().toString();
                String b = text2.getText().toString();
                String c= text3.getText().toString();
                String d= text4.getText().toString();
                String e= text5.getText().toString();

                //this is where my error appears
                mCallback.executeOrder(a, b, c, d, e);
            }
            return rootView;
        }
    }

(here is my error message)

    05-26 09:39:20.868    2916-2916/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.example.blueHatCoder.myapplication, PID: 2916
        java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.blueHatCoder.myapplication.FragmentDetails$OnDetailsDefinedListener.executeOrder(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference
        at com.example.blueHatCoder.myapplication.FragmentDetails$6.onClick(FragmentDetails.java:131)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Thanks in advance.

+4
source share
4 answers

mCallbacknever starts. you should do something like this:

mCallback = new OnDetailsDefinedListenerImpl(); 
mCallback.executeOrder(a, b, c, d, e);

or

mCallback = new OnDetailsDefinedListener(){
   @Override
   void executeOrder(String a, String b, String c, String d, String e){
     //doSomething
   };
}
+5
source

Your variable is mCallbackdefined but not initialized. You must initialize it before you can use it.

+1
source

FragmentDetails.

public setOnDetailsDefinedListener(OnDetailsDefinedListener listener) {
    mCallback = listener;
}

And just implement it in the caller class. just like you do when you add a listener button.

mFragmentDetails.setOnDetailsDefinedListener(new OnDetailsDefinedListener() {
// You code
})
+1
source

Maybe you need to use the onAttach (Activity activity) fragment method

public void onAttach(Activity activity){
    super.onAttach(activity);
    if(activity instanceof onSomeListener){
        mListener=(onSomeListener) activity;
    }
}
0
source

All Articles