【问题标题】:Firestore not retrieving all documents from a collectionFirestore 未从集合中检索所有文档
【发布时间】:2017-11-25 22:27:09
【问题描述】:

所以我有一个这样的集合:

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 方法,并且不会更改 RoomList。

【问题讨论】:

    标签: java android google-cloud-firestore


    【解决方案1】:

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

    【讨论】:

    • 这对我仍然不起作用。我正在使用回收站视图,我应该把它放在活动中还是适配器中?
    • 不,我使用数据绑定重建了它。
    • 我的回答对您有任何帮助吗?
    • 不,同样的问题,仍然不知道为什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2020-08-08
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多