有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在OnCompleteListener之后,java ArrayList在从FireStore接收数据后清空,如何保存它?

我从FireStore集合中获取并将其添加到ArrayList中的代码中应该有可见的数据,我知道这是因为get()方法立即返回,因此查询尚未完成,因此onCreate()方法不会看到任何数据,但有没有办法将该数据保存在ArrayList中并在其他地方使用

例如,这里有两个版本的代码: 第一个是用完整的清单做吐司,就像它应该做的那样:

        db.collection("Users Data")
                .document(currentUserID)
                .collection("Follows")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                following.add(document.getId());
                                Toast.makeText(SearchedProfile.this, following.toString(), Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                });

第二个是用空的数组列表做吐司(吐司上写着“[]”)

        db.collection("Users Data")
                .document(currentUserID)
                .collection("Follows")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                following.add(document.getId());
                            }
                        }
                    }
                });

        Toast.makeText(SearchedProfile.this, following.toString(), Toast.LENGTH_SHORT).show();

唯一的区别是Toast方法的位置


共 (1) 个答案

  1. # 1 楼答案

    您收到一个空数组列表,因为您的代码isn't synchronous

    换言之,在您的oncomplete运行之前,祝酒词会被调用。 当oncomplete运行时,您需要调用在回调中使用数据的方法