Ошибка означает, что ваш randomPlaceList
равен нулю.
Так как я не вижу приложение или логику, которую вы выполнили, чтобы получить ошибку, я просто основываюсь на том, что вижу.
Во-первых, если вам нужно получить выбранный элемент, то следует сделать, вызвав метод getItem(position)
вашего adapter
; Вы можете легко реализовать это, как показано ниже:
@Override
public Places getItem(int position) {
if(dataSet != null && position < dataSet.size()){
return dataSet.get(position);
}
return null;
}
Теперь со своего activity
вы можете просто выполнить вызов, например:
Places places = mAdapter.getItem(position);
Не забудьте добавить ссылку на adapter
при инициализации, добавив PlaceAdapter mAdapter;
в переменные действия и заменив инициализацию на
mAdapter = new PlaceAdapter(randomPlaceList, getBaseContext());
mListView.setAdapter(mAdapter);
быстро читая код, я тоже не вижу в этом смысла:
this.randomPlaceList = randomPlaceList;
но, может быть, вы вырезали какой-то код, но я предпочитаю сообщить об этом вам, на всякий случай:)
Примечание для указания ошибки
Ошибка здесь и относится к переменной:
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Places> placesList = new ArrayList<>();
for (DocumentSnapshot document : task.getResult()) {
Places place = document.toObject(Places.class);
placesList.add(place);
}
int placeCount = placesList.size();
Random randomGenerator = new Random();
// In the line below, you specify a new ArrayList that is LOCAL, you don't refer to the Activity's object
ArrayList<Places> randomPlaceList = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
randomPlaceList.add(placesList.get(randomGenerator.nextInt(placeCount)));
}
ListView mListView = (ListView) findViewById(R.id.place_list);
PlaceAdapter placeAdapter = new PlaceAdapter(randomPlaceList, getBaseContext());
mListView.setAdapter(placeAdapter);
}
});
Вы должны заменить его на:
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Places> placesList = new ArrayList<>();
for (DocumentSnapshot document : task.getResult()) {
Places place = document.toObject(Places.class);
placesList.add(place);
}
int placeCount = placesList.size();
Random randomGenerator = new Random();
randomPlaceList = new ArrayList<>(); //this is the activity's list
for (int i = 1; i <= 3; i++) {
randomPlaceList.add(placesList.get(randomGenerator.nextInt(placeCount)));
}
ListView mListView = (ListView) findViewById(R.id.place_list);
PlaceAdapter placeAdapter = new PlaceAdapter(randomPlaceList, getBaseContext());
mListView.setAdapter(placeAdapter);
}
});
В противном случае список действий всегда будет нулевым, поскольку вы никогда его не инициируете
Надеюсь, это поможет