2017-11-25 202 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

不,我使用数据绑定重建它。 –