首页 > 解决方案 > 如何解决这个 Android Studio Firebase 问题?

问题描述

我正在尝试从 Firebase 获取数据到 bilgiler 变量。但我总是出错。我该如何解决这个问题?

Map<String, String> bilgiler = new HashMap<>();

db.collection("tarihBilgi")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
                                //Log.d("TAG", document.getId() + " => " + document.getData());
                                bilgiler.put("asdf", document.getData().toString());
                            }
                        } else {
                            Log.w("TAG", "Error getting documents.", task.getException());
                        }
                    }
                });
        Log.i("asdfads",(bilgiler.get("asdf")));

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


数据从 Firebase 异步加载。现在你Log.i("asdfads",(bilgiler.get("asdf")));在运行之前bilgiler.put("asdf", document.getData().toString())运行,这就解释了为什么你看不到数据库中的值。

任何需要来自数据库的数据的代码,都需要在onComplete方法内部,或者从那里调用。所以:

db.collection("tarihBilgi")
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
                    bilgiler.put("asdf", document.getData().toString());
                    Log.i("asdfads",(bilgiler.get("asdf")));
                }
            } else {
                Log.w("TAG", "Error getting documents.", task.getException());
            }
        }
    });

另见:


推荐阅读