2017-11-25 5 views
0

So habe ich eine Sammlung wie folgt aus:Firestore Abrufen nicht alle Dokumente aus einer Sammlung

Rooms(collection) 
    -C1(document) 
    -D1(document) 
    -E1(document) 
    -F1(document) 

Ich möchte die Dokumente alle hier bekommen, und sie in eine Liste setzen.

Mein Code weit so (Roomlist ist eine private globale Variable, die ich in der onCreate initialisieren):

private void getRooms(){ 

    CollectionReference rooms = db.collection("Rooms"); 
    rooms.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 
     @Override 
     public void onComplete(@NonNull Task<QuerySnapshot> task) { 
      if(task.isSuccessful()){ 
       for (DocumentSnapshot document : task.getResult()){ 
        Room r = new Room(); 
        r.setRoomNumber(document.getId()); 
        Map<String, Object> data = document.getData(); 
        r.setDescription(data.get("Description").toString()); 
        RoomList.add(r); 
       } 
      } 
     } 
    }) 

Jedes Mal, wenn ich den Debugger ausführen, überspringt es vollständig über die onComplete Methode, und nicht ändert die Raumliste.

Antwort

0

Ihre RoomList ist immer leer, weil onComplete() Methode asynchron aufgerufen wird, was bedeutet, dass genannt wird, noch bevor Sie die Objekte von Room Klasse zu der Liste hinzufügen möchten. Um dies zu lösen, müssen Sie die Deklaration Ihrer Liste innerhalb der onComplete Methode wie folgt verschieben:

private void getRooms(){ 
    CollectionReference rooms = db.collection("Rooms"); 
    rooms.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 
     @Override 
     public void onComplete(@NonNull Task<QuerySnapshot> task) { 
      List<Room> list = new ArrayList<>(); 
      if(task.isSuccessful()){ 
       for (DocumentSnapshot document : task.getResult()){ 
        Room r = new Room(); 
        r.setRoomNumber(document.getId()); 
        Map<String, Object> data = document.getData(); 
        r.setDescription(data.get("Description").toString()); 
        RoomList.add(r); 
       } 
      } 
      Log("TAG", list); 
     } 
    }) 
} 
+0

Das funktioniert immer noch nicht für mich. Ich benutze eine Recycler-Ansicht, sollte ich dies in die Aktivität oder den Adapter einfügen? –

+0

In der Aktivität. Haben Sie einen Fehler? –

+0

Nein, ich habe es mithilfe der Datenbindung neu erstellt. –

Verwandte Themen