Как выполнить итерацию коллекции Firestore на Android?

#android #google-cloud-firestore

#Android #google-облако-firestore

Вопрос:

У меня есть коллекция Firestore, подобная этой: введите описание изображения здесь

Взгляните на коллекцию kost. В нем есть 4 документа, и в каждом документе есть следующие поля: fasilitas, gender, harga и т. Д

Для каждого документа я хочу получить все поля.

Теперь у меня есть это:

  FirebaseFirestore firestore = FirebaseFirestore.getInstance();
DocumentReference docRef = firestore.collection("kost").document();
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()){
            for (DocumentSnapshot ds:task.getResult()){
                
            }
        }
    }
});
  

Это даже неправильный код, task.getResult() подчеркнутый:

foreach не применимо к типу ‘com.google.firebase.firestore.DocumentSnapshot

Тогда каков правильный способ?

Ответ №1:

Ваши проблемы в этом коде:

 DocumentReference docRef = firestore.collection("kost").document();
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
  

Ваши docRef точки указывают на новый пустой документ. Вместо этого вы хотите указать на всю коллекцию, как показано в документации по чтению всех документов в коллекции:

 db.collection("kost")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId()   " => "   document.getData());
                    }
                } else {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
            }
        });