简体   繁体   English

在 firebase 响应之前执行的返回语句

[英]Return statement executing before firebase response

I am using FirebaseFirestore to nosql database, I have a dedicated java class to execute all the firebase Read, Write and Delete queries. I am using FirebaseFirestore to nosql database, I have a dedicated java class to execute all the firebase Read, Write and Delete queries.

The problem I am facing is while fetching my Users data from Firestore, and storing it in an array list.我面临的问题是从 Firestore 获取我的用户数据并将其存储在数组列表中。 After all the users are update in the arraylist, then i am returning that list to update the UI.在 arraylist 中更新所有用户之后,我将返回该列表以更新 UI。 but my funciton below is returning the empty list and then the firebase query is updating the data into the list.但我下面的功能是返回空列表,然后 firebase 查询将数据更新到列表中。

public List<Users> getAllUsers() {
    return loadAllUserData();
}
private List<Users> loadAllUserData() {
    List<Users> usersList  = new ArrayList<>();

    mFirebaseFirestore.collection(USER_DATA).get()
            .addOnSuccessListener(queryDocumentSnapshots -> {
                List<DocumentSnapshot> docSnap = 
                queryDocumentSnapshots.getDocuments();
                
                for (DocumentSnapshot docs : docSnap) {
                    Users user = docs.toObject(Users.class);
                    usersList.add(user);
                    Log.d(TAG, "onSuccess: loaded Users : " + usersList.size());
                }
            });
    Log.d(TAG, "loadAllUserData: Returning users : " + usersList.size());

    return usersList;
}

logs日志

2022-09-01 23:13:38.786 /com.app D/Repository: Repository: Called 2022-09-01 23:13:38.786 /com.app D/Repository: Repository: 调用

2022-09-01 23:13:38.787 /com.app D/Repository: Repository: Called 2022-09-01 23:13:38.787 /com.app D/Repository:Repository:调用

2022-09-01 23:13:38.787 /com.app D/Repository: loadAllUserData: Returning users: 0 2022-09-01 23:13:38.787 /com.app D/Repository: loadAllUserData: 返回用户: 0

2022-09-01 23:13:38.962 /com.app D/Repository: onSuccess: loaded Users: 1 2022-09-01 23:13:38.962 /com.app D/Repository:onSuccess:加载用户:1

2022-09-01 23:13:38.962 /com.app D/Repository: onSuccess: loaded Users: 2 2022-09-01 23:13:38.962 /com.app D/Repository:onSuccess:加载用户:2

2022-09-01 23:13:38.962 /com.app D/Repository: onSuccess: loaded Users: 3 2022-09-01 23:13:38.962 /com.app D/Repository:onSuccess:加载用户:3

2022-09-01 23:13:38.963 /com.app D/Repository: onSuccess: loaded Users: 4 2022-09-01 23:13:38.963 /com.app D/Repository:onSuccess:加载用户:4

The get() operation is an asynchronous operation. get() 操作是异步操作。 Because of that, the return will be executed before the addOnSuccessListener.因此,返回将在 addOnSuccessListener 之前执行。

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

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