java - 如何通过其uid获取Firestore用户列表?

标签 java android firebase google-cloud-firestore

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

public void getNeededUsers(List<String> uidList, UsersListCallback usersListCallback) {
        CollectionReference users = db.collection(Consts.USERS_DB);
        for (String uid: uidList) {
            users.whereEqualTo(Consts.UID, uid).get()
                    .addOnCompleteListener(task -> {
                        List<FsUser> fsUserList = new ArrayList<>();
                        for (DocumentSnapshot snapshot : task.getResult().getDocuments()) {
                            fsUserList.add(snapshot.toObject(FsUser.class));
                        }
                        usersListCallback.getUsers(fsUserList);
                    });
        }
    } 

但是这个方法好像不太好用。当我尝试用另一种方法迭代用户列表时,我从回调中一个接一个地接收用户,而不是获取全部用户,因此它们在我的列表中重复。

这是另一种方法的代码:

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

关于java - 如何通过其uid获取Firestore用户列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244002/

相关文章:

javascript - 当我将图像上传到 firebase 存储并检索下载 url 并显示在 img 标记中但它显示多次时

java.net.SocketTimeoutException : timeout

java - 根据另一个 Portlet 的事件显示或隐藏一个 Portlet

android - 从横向旋转到纵向时,Phonegap/HTML5 和 Android 屏幕调整大小问题

Android Soundpool Load(String path, int priority)

android - 在 Android Lollipop 上使用 NFC 激活设备所有者

android - Firebase 规则 : dynamically give access to a specific user

java - java中随机函数的最大范围

java - Spring @Controller 和 Transactionmanager

如果应用程序关闭,Firebase 动态链接将不起作用