0

I am having trouble accessing my UIs from MainActivity after creating the Intent methods.My app crashes when I select the SelectPLayer and SelectPLayer2 activities from my MainActivity. I am also having trouble getting the Clickable ListViews to go to the specified TextView in GameEmulator.

//MainActivity.java


        //Class to select player 1
        public class SelectPlayer extends Activity {


            //Public static array list with adapter to crete the array and reference for listview being sent by intent from AddPLayer class
            public static ArrayList<String> list = new ArrayList<>();
            public static ArrayAdapter<String> adapter;
            ListView selectView;
            TextView title;

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

                //Identify selectview ListView
                selectView = findViewById(R.id.selectview) ;
                selectView.setClickable(true);
                selectView.setVisibility(View.VISIBLE);

                //Using adapter for ListView menu
                adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
                selectView.setAdapter(adapter);
                selectView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        String item =(String) parent.getItemAtPosition(position); // finding the item which has been clicked by the user
                        Intent intent = new Intent(SelectPlayer.this, GameEmulator.class); //starting an intent to call GameEmulator Activity
                        intent.putExtra(GameEmulator.value, item);// Putting the value clicked by user in intent
                        startActivity(intent); // starting GameEmulator Activity
                    }
                });
                //Using intent to retrieve string from AddPlayer Activity
                    Intent i = getIntent();
                    String data = i.getExtras().getString("text_key");
                    list.add(data);
                    changeList();
            }
            public static void changeList()
            {

                adapter.notifyDataSetChanged();
            }
        }

//Addplayer.java

import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.os.Bundle;
import android.widget.Button;
import android.content.Intent;

//Addplayer class to add players using intent to separate activities
public class AddPlayer extends Activity{

    //Declare buttons and edittext
    Button listButtonplayer1;
    Button listButtonplayer2;
    EditText playerIn;

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


        //Identify buttons and editext
        playerIn = (EditText) findViewById(R.id.inputname);

        listButtonplayer1 = (Button)findViewById(R.id.addbutton);
        listButtonplayer1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Using intent to send input to SelectPLayer Class
                Intent i = new Intent(AddPlayer.this,SelectPlayer.class);

                //Using string text_key to get and send string through intent
                i.putExtra("text_key", playerIn.getText().toString());


                //Start intent activity
                startActivity(i);
            }
        });

        //Second button I am trying to use for SelectPLayer2 activity only.
        listButtonplayer2 = (Button)findViewById(R.id.addbutton2);
        listButtonplayer2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Using intent to send input to SelectPLayer2 Class
                Intent in = new Intent(AddPlayer.this, SelectPlayer2.class);

                in.putExtra("text_key", playerIn.getText().toString());

                startActivity(in);
            }
        });
    }
}
Selectplayer1.java
//Class to select player 1
public class SelectPlayer extends Activity {


    //Public static array list with adapter to crete the array and reference for listview being sent by intent from AddPLayer class
    public static ArrayList<String> list = new ArrayList<>();
    public static ArrayAdapter<String> adapter;
    ListView selectView;
    TextView title;

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

        //Identify selectview ListView
        selectView = findViewById(R.id.selectview) ;
        selectView.setClickable(true);
        selectView.setVisibility(View.VISIBLE);

        //Using adapter for ListView menu
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
        selectView.setAdapter(adapter);
        selectView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String item =(String) parent.getItemAtPosition(position); // finding the item which has been clicked by the user
                Intent intent = new Intent(SelectPlayer.this, GameEmulator.class); //starting an intent to call GameEmulator Activity
                intent.putExtra(GameEmulator.value, item);// Putting the value clicked by user in intent
                startActivity(intent); // starting GameEmulator Activity
            }
        });
        //Using intent to retrieve string from AddPlayer Activity
            Intent i = getIntent();
            String data = i.getExtras().getString("text_key");
            list.add(data);
            changeList();
    }
    public static void changeList()
    {

        adapter.notifyDataSetChanged();
    }
}
//Selectplayer2.java

//Class to select player 2
public class SelectPlayer2 extends Activity {

    //Public static array list with adapter to crete the array and reference for listview being sent by intent from AddPLayer class
    public static ArrayList<String> list1 = new ArrayList<>();
    public static ArrayAdapter<String> adapter1;

    ListView selectView2;

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

        selectView2 = (ListView) findViewById(R.id.selectview1);
        selectView2.setClickable(true);
        selectView2.setVisibility(View.VISIBLE);

        //Using adapter for ListView menu
        adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list1);
        selectView2.setAdapter(adapter1);
        selectView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    String item =(String) parent.getItemAtPosition(position); // finding the item which has been clicked by the user
                    Intent in = new Intent(SelectPlayer2.this, GameEmulator.class); //starting an intent to call GameEmulator Activity
                    in.putExtra(GameEmulator.value, item);// Putting the value clicked by user in intent
                    startActivity(in); // starting GameEmulator Activity
            }
        });

        //Using intent to retrieve string from AddPlayer Activity
        Intent in = getIntent();
        String data = in.getExtras().getString("text_key");
        list1.add(data);
        changeList();
    }
    public static void changeList()
    {

        adapter1.notifyDataSetChanged();
    }
}

I have seperate static array lists, but the listview clickables are still showing on both textviews in the GameEmulator class. Here is my error log trying to click the button for SelectPLayer UI:

07-17 23:41:37.296 13468-13468/com.example.ryan_.ryansplayersapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ryan_.ryansplayersapp, PID: 13468
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ryan_.ryansplayersapp/com.example.ryan_.ryansplayersapp.SelectPlayer}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
        at com.example.ryan_.ryansplayersapp.SelectPlayer.onCreate(SelectPlayer.java:47)
        at android.app.Activity.performCreate(Activity.java:7009)
        at android.app.Activity.performCreate(Activity.java:7000)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
Rybo
  • 41
  • 6

1 Answers1

1
 String data = i.getExtras().getString("text_key");

Your getExtras() is returning null. Make sure you initialise your intent properly.

user456
  • 262
  • 2
  • 9