首页 > 解决方案 > 如何从android的fireStore数据库中读取嵌套地图

问题描述

在此处输入图像描述

在上图中,我有一个包含 2020、2021 等数组列表的地图。我想在 RecyclerView 中显示数组数据。如何在android中做到这一点?

如果地图包含地图列表,如何检索数据。我能够获取带有字段名称的文档,但在如何获取带有字段名称的地图和该地图中的数据时遇到了困难。

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


DocumentSnapshot 的getData()方法返回一个类型为 的对象Map<String, Object>。由于它是一个 Map,我们可以简单地获取year并遍历相应的 URL,如下面的代码行所示:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference subjectRef = rootRef.collection("subject");
DocumentReference politicalScienceRef = subjectRef.document("political science");
politicalScienceRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                List<String> urls = new ArrayList<>();
                Map<String, Object> data = document.getData();
                Map<String, Object> year = (Map<String, Object>) data.get("year");
                for (Map.Entry<String, Object> entry : year.entrySet()) {
                    List<String> yearUrls = (List<String>) entry.getValue();
                    for (String url : yearUrls) {
                        urls.add(url);
                    }
                }
                for (String url : urls) {
                    Log.d("TAG", url);
                }
            } else {
                Log.d("TAG", "No such document");
            }
        } else {
            Log.d("TAG", "get failed with ", task.getException());
        }
    }
});

最后,只需将urls列表传递给适配器,并将所有这些 URL 显示到 RecyclerView 中。


推荐阅读