stokexx
stokexx

Reputation: 77

Interface NullPointerException - Sending Listener w/ Data to MainActivity on Button Click within Fragment

Been working on sending some String data to my MainActivity on a button click from within a fragment. It doesn't seem like a difficult procedure, but I'm getting tied up somewhere and receiving a NullPointerException. I'm assuming it has something to do with the way I'm using the interface. New to Android, suggestions and comments would be appreciated. Thanks!

INTERFACE CODE:

public interface BtnInterface {
    public void btnClicked(String x, String y, String z, String w);
}

MAIN ACTIVITY SNIPPET:

public class MainActivity extends Activity implements BtnInterface{

    Fragment_X frag;
    FragmentTransaction ft;

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

        frag = new Fragment_X();
        frag.setInterface(this);
        ft = getFragmentManager().beginTransaction();
        ft.add(R.id._frag_container, frag);
        ft.commit();
    }

    @Override
    public void btnClicked(String x, String y,String z, String w) {
        Log.d("data-check", x); 
    }

FRAGMENT SNIPPET:

public class Fragment_X extends Fragment {

    View v;
    Button btn;
    BtnInterface buttonInterface;
    String x, y, z, w;
    String  choices1 = {"random", "values"}
    String  choices2 = {"random", "values"}
    String  choices3 = {"random", "values"}
    String  choices4 = {"random", "values"}

    public void setInterface(BtnInterface buttonInterface) {
        this.buttonInterface = buttonInterface;
    }

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

        v = inflater.inflate(R.layout.frag_layout, container,
            false);

        spin1 = (Spinner) v.findViewById(R.id.spin1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
            R.layout.spinner_layout, choices1);
        adapter.setDropDownViewResource(R.layout.spinner_dropdown);
        spinSomewhere.setAdapter(adapter);

        spin2 = (Spinner) v.findViewById(R.id.spin2);
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(getActivity(),
            R.layout.spinner_layout, choices2);
        adapter1.setDropDownViewResource(R.layout.spinner_dropdown);
        spinFor.setAdapter(adapter1);

        spin3 = (Spinner) v.findViewById(R.id.spin3);
        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getActivity(),
            R.layout.spinner_layout, choices4);
        adapter2.setDropDownViewResource(R.layout.spinner_dropdown);
        spinXp.setAdapter(adapter2);

        spin4 = (Spinner) v.findViewById(R.id.spin4);
        ArrayAdapter<String> adapter3 = new ArrayAdapter<String>(getActivity(),
            R.layout.spinner_layout, choices4);
        adapter3.setDropDownViewResource(R.layout.spinner_dropdown);
        spinWith.setAdapter(adapter3);

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                x = spin1.getSelectedItem().toString();
                y = spin2.getSelectedItem().toString();
                z = spin3.getSelectedItem().toString();
                w = spin4.getSelectedItem().toString(); 

                buttonInterface.btnClicked(x,y,z,w);
            }
        });

        return v;
    }
}  

ERROR LOG:

05-30 21:27:35.230: E/AndroidRuntime(3016): FATAL EXCEPTION: main
05-30 21:27:35.230: E/AndroidRuntime(3016): Process: com.ex.app, PID: 3016
05-30 21:27:35.230: E/AndroidRuntime(3016): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.ex.app/com.ex.app.MainActivity}:    java.lang.NullPointerException
05-30 21:27:35.230: E/AndroidRuntime(3016):     at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at     android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.os.Handler.dispatchMessage(Handler.java:102)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.os.Looper.loop(Looper.java:136)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.ActivityThread.main(ActivityThread.java:5017)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at java.lang.reflect.Method.invokeNative(Native Method)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at java.lang.reflect.Method.invoke(Method.java:515)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at dalvik.system.NativeStart.main(Native Method)
05-30 21:27:35.230: E/AndroidRuntime(3016): Caused by: java.lang.NullPointerException
05-30 21:27:35.230: E/AndroidRuntime(3016):     at com.ex.app.Fragment_X.onCreateView(Fragment_X.java:75)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.Fragment.performCreateView(Fragment.java:1700)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.BackStackRecord.run(BackStackRecord.java:684)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.Activity.performStart(Activity.java:5240)
05-30 21:27:35.230: E/AndroidRuntime(3016):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
05-30 21:27:35.230: E/AndroidRuntime(3016):     ... 11 more

Upvotes: 0

Views: 435

Answers (2)

stokexx
stokexx

Reputation: 77

Simple answer. Forgot the most simple line:

btn = (Button) v.findViewById(R.id.btn);

As I said... very new to Android.

Upvotes: 0

Rod_Algonquin
Rod_Algonquin

Reputation: 26198

It is null because you forgot to set the BtnInterface to the Fragment_X after you instantiate it.

solution:

frag = new Fragment_X();
frag.setInterface(this);
    ft = getFragmentManager().beginTransaction();
    ft.add(R.id._frag_container, frag);
    ft.commit();

Upvotes: 1

Related Questions