简体   繁体   中英

viewAdapter causing app to crash

I have been trying to figure out why my app has been crashing every time I try to view the list of player names by clicking leaderboard. This is not complete in terms of functionality yet, but I cannot get past the step of two players entering their names and the data being transferred to the list of names upon clicking the button (which will eventually be a leaderboard). I'm just trying to learn android basics and cannot understand why the crash keeps happening. Any help would be greatly appreciated.

public class ListAdapter extends ArrayAdapter<Player> {

LayoutInflater inflater;
public ListAdapter(Context context, ArrayList<Player> players){
    super(context, R.layout.user_item, players);
    inflater = LayoutInflater.from(context);
}

@Override
@NonNull
public View getView(int position, View view, @NonNull ViewGroup parent){
    if (view == null){
        view = inflater.inflate(R.layout.user_item, parent, false);
    }
    Player user = getItem(position);
   String text = user.getName() + "" + "Score:" + user.getScore();
   ((TextView) view.findViewById(R.id.result)).setText(text);
    return view;
}
}

Main activity

public class MainActivity extends AppCompatActivity {


private ArrayList<Player> players = new ArrayList<>();

@Override
/*
Creates buttons and assigns listeners.
 */
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button newgame = findViewById(R.id.newgame);
    Button leader = findViewById(R.id.leader);

    final EditText player1 = (EditText) findViewById(R.id.player1);
    final EditText player2 = (EditText) findViewById(R.id.player2);


    //New Game Button listener, irrelevant for right now

    leader.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name1 = player1.getText().toString();
            String name2 = player2.getText().toString();
            Player user1 = new Player(name1);
            Player user2 = new Player(name2);
            players.add(user1);
            players.add(user2);
            Intent list = new Intent(view.getContext(), Leaderboard.class);
            list.putParcelableArrayListExtra(getString(R.string.players), players);


            startActivity(new Intent(MainActivity.this, Leaderboard.class));

        }
    });
}
}

What should be a listview of players

public class Leaderboard extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_leaderboard);
    ArrayList<Player> players = getIntent().getParcelableArrayListExtra(getString(R.string.players));
    ListView listView = findViewById(R.id.list);
    ListAdapter adapter = new ListAdapter(this, players);
    listView.setAdapter(adapter); //LINE CAUSING CRASH
    Button reset = findViewById(R.id.reset);
    Button menu = findViewById(R.id.menu);


    reset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });

    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(Leaderboard.this, MainActivity.class));
        }
    });
}
}

Error Log:

Caused by: java.lang.NullPointerException: Attempt to invoke interface 
method 'int java.util.List.size()' on a null object reference

at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:380)

 at android.widget.ListView.setAdapter(ListView.java:575)

I do not understand how the size is null, if I am entering player names.

ArrayList players is null after you are assigning it using getIntent().getParcelableArrayListExtra(getString(R.string.players));

When you pass players to the adapter, the adapter tries to get the size of the arraylist and throws an exception because the list is null.

Make sure that your arraylist is not null before instantiating the adapter and assigning it to the listview.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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