java - 如何从android的fireStore数据库中读取嵌套地图
问题描述
在上图中,我有一个包含 2020、2021 等数组列表的地图。我想在 RecyclerView 中显示数组数据。如何在android中做到这一点?
如果地图包含地图列表,如何检索数据。我能够获取带有字段名称的文档,但在如何获取带有字段名称的地图和该地图中的数据时遇到了困难。
解决方案
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 中。
推荐阅读
- c++ - 为什么 std::make_shared 在使用非内联静态 const 成员时会导致链接器错误?
- flutter - 使用 ConnectyCube 在 Flutter Chat 中搜索
- vba - Word VBA 过程调用突然第二次失败
- typescript - 如何在 Vue Typescript JSX 中使用 v-slot
- c# - 在 foreach 循环中为 MouseEnter 和 MouseLeave 添加一个 EventHandler
- lapack - LAPACK 中用于实现 Moore-Penrose psudo 反转的最佳驱动程序是什么
- angular - 如何在 Visual Studio 中使用正则表达式引用路径而不获取 ArgumentException:路径中的非法字符?
- python - 如何将字典格式化为具有定义结构的 JSON
- python - Matplotlib 将多个多边形绘制为列表列表的列表。没有诸如 Shapely 之类的库
- shopify - 在 Shopify 中添加指向 ResourceList 项目的链接