繁体   English   中英

如何从 firestore 查询中的合并任务中检索数据?

[英]How to retrieve data from merge tasks in firestore query?

有人可以告诉我如何检索所有三个任务吗? 实际上,我只能检索两个任务。

CollectionReference players = db.collection("gamers");

    Task task1 = players.whereEqualTo("player_id_one", myId)
            .get();

    Task task2 = players.whereEqualTo("player_id_two", myId)
            .get();
Task task3 = players.whereEqualTo("player_id_three",myId).get();

    Task<List<QuerySnapshot>> allTasks = Tasks.whenAllSuccess(task1, task2,task3);
    allTasks.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
        @Override
        public void onSuccess(List<QuerySnapshot> querySnapshots) {
            for (QuerySnapshot queryDocumentSnapshots : querySnapshots) {
                for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                    Modelgame players = documentSnapshot.toObject(Modelgame.class);
                    result.add(modelplayer);
                    adapter.notifyDataSetChanged();

                }
            }
        }
    });

当您使用Tasks#whenAllSuccess(Task...<?> tasks)方法时:

当所有指定的任务都成功完成时,返回一个任务,其中包含成功完成的任务结果列表。

这意味着您获得的 List不是List<QuerySnapshot>而是List<Object>

allTasks.addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> querySnapshots) {
        //Loop through the list only once
        for (Object object : querySnapshots) {
            Modelgame players = ((DocumentSnapshot) object).toObject(Modelgame.class);
            result.add(modelplayer);
            Log.d("TAG", players.getName());
        }
        adapter.notifyDataSetChanged(); //Added when the for loop ends.
    }
});

因此,一旦所有任务都成功完成,您只需循环一次结果并将 object 转换为DocumentSnapshot object 并调用toObject()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM