Это способ отображения данных из базы данных Cloud Firestore в ListView
с помощью пользовательского ArrayAdapter
с Android.
Прежде всего, чтобы добавить данные в базу данных, вы должны использовать следующие строки кода:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference placesRef = rootRef.collection("places");
Places places = new Places("PlaceOne", "ImageOne");
placesRef.document().set(places);
Таким образом, вы можете добавить столько мест, сколько хотите. Итак, у вас будет структура базы данных, которая будет выглядеть следующим образом:
Firestore-root
|
--- places (collection)
|
--- placeIdOne (document)
| |
| --- image: "ImageOne"
| |
| --- name: "NameOne"
|
--- placeIdTwo (document)
| |
| --- image: "ImageTwo"
| |
| --- name: "NameTwo"
|
--- //And so on
Чтобы быть более ясным, см. Изображение ниже:
Если вы хотите запросить данные, вам нужно использовать Query
объект.
Query query = placesRef.whereEqualTo("name", "NameOne");
Но поскольку в базе данных у меня всего несколько записей, я буду использовать только placesRef
CollectionReference.
Предполагая, что у вас уже есть ListView
в вашем файле .XML, который выглядит следующим образом:
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/place_list"/>
Для отображения данных сначала необходимо создать класс адаптера. Этот класс должен выглядеть так:
public class PlacesAdapter extends ArrayAdapter<Places> {
public PlacesAdapter(Context context, List<Places> list) {
super(context, 0, list);
}
@NonNull
@Override
public View getView(int position, View listItemView, @NonNull ViewGroup parent) {
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
Places places = getItem(position);
String name = places.getName();
((TextView) listItemView).setText(name);
return listItemView;
}
}
Тогда в вашем методе onCreate()
используйте следующий код:
placesRef.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 places = document.toObject(Places.class);
placesList.add(places);
}
int placeCount = placesList.size();
Random randomGenerator = new Random();
List<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);
PlacesAdapter placesAdapter = new PlacesAdapter(getApplicationContext(), randomPlaceList);
mListView.setAdapter(placesAdapter);
}
}
});
Результат в вашем ListView будет 3 случайных места при каждом запуске приложения.