Java 如何通过uid获取Firestore用户列表?

Java 如何通过uid获取Firestore用户列表?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我有一个通过uid获取用户列表的方法: 但这种方法似乎不能正常工作。当我尝试用另一种方法遍历用户列表时,我会从回调中一个接一个地接收用户,而不是获取所有用户,因此它们会复制到我的列表中 下面是另一种方法的代码: public void createUserChats(UserChatListCallback userChatListCallback) { final List<UserChat> userChatList = new ArrayList<>

我有一个通过uid获取用户列表的方法:

但这种方法似乎不能正常工作。当我尝试用另一种方法遍历用户列表时,我会从回调中一个接一个地接收用户,而不是获取所有用户,因此它们会复制到我的列表中

下面是另一种方法的代码:

public void createUserChats(UserChatListCallback userChatListCallback) {
        final List<UserChat> userChatList = new ArrayList<>();

        getChatAndUidList((chatList, uidList) -> {
            getRtUsersAndMessages(uidList, (rtUserList, messageList) -> {
                getNeededUsers(uidList, userList -> {

                    if (!userList.isEmpty()) {
                        for (int i = 0; i < userList.size(); i++) {
                            String name = userList.get(i).getName();
                            String image = userList.get(i).getImage();
                            String userId = userList.get(i).getUid();

                            long timeStamp = chatList.get(i).getTimeStamp();
                            boolean seen = chatList.get(i).getSeen();

                            String online = rtUserList.get(i).getOnline();

                            String message = messageList.get(i).getMessage();
                            long messageTimestamp = messageList.get(i).getTime();


                            userChatList.add(new UserChat(name, image, timeStamp, seen, userId, online,
                                    message, messageTimestamp));

                        }
                    }
                    userChatListCallback.getUserChatList(userChatList);
                });
            });
        });
    }

要获取用户列表,请使用以下代码:

List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
for (String uid: uidList) {
    Task<DocumentSnapshot> documentSnapshotTask = users.whereEqualTo(Consts.UID, uid).get();
    tasks.add(documentSnapshotTas);
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> list) {
        //Do what you need to do with your users list
        for (Object object : list) {
            FsUser fsUser = ((DocumentSnapshot) object).toObject(TeacherPojo.class);
            Log.d("TAG", fsUser.getName());
        }
    }
});

但是用户有CollectionReference类型,所以我们需要Task在这种情况下,可以随意使用Task。一点问题都没有。谢谢,它很有效!但我还是得到了重复的列表。我应该结束这个问题并问新问题,还是我们可以继续?你不应该结束这个问题,你应该用MCVE问另一个问题。干杯我找到了一种修复它并避免重复的方法:检查userChatList是否为空。你知道其他的方法来修复它或给它的建议吗?
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
for (String uid: uidList) {
    Task<DocumentSnapshot> documentSnapshotTask = users.whereEqualTo(Consts.UID, uid).get();
    tasks.add(documentSnapshotTas);
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> list) {
        //Do what you need to do with your users list
        for (Object object : list) {
            FsUser fsUser = ((DocumentSnapshot) object).toObject(TeacherPojo.class);
            Log.d("TAG", fsUser.getName());
        }
    }
});