2017-11-25 201 views
0

檢索所有文件所以我有這樣一個集合:沒有的FireStore從集合

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

我想在這裏得到的所有文件,並把它們在列表中。

到目前爲止我的代碼(RoomList是私有的全局變量,我在OnCreate初始化):

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); 
       } 
      } 
     } 
    }) 

我每次運行調試器,它完全跳過了的onComplete方法,並且不改變房間列表。

回答

0

RoomList總是空的,因爲onComplete()方法被稱爲異步,這意味着是叫你試圖Room類的這些對象添加到列表中甚至之前。爲了解決這個問題,你需要將你的清單申報的onComplete方法中是這樣的:

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

仍然無法爲我工作。我正在使用回收站視圖,是否應該將其放入活動或適配器中? –

+0

在活動中。你有錯誤嗎? –

+0

不,我使用數據綁定重建它。 –