java - 如何从Android(Java)中的Firestore读取嵌套对象值及其键
问题描述
我正在尝试从嵌套对象中读取值以及 android 中的键,但我无法根据我的要求找到任何解决方案。(我是 Firestore 和 android 开发的新手)
我尝试了 foreach 循环,但它显示错误- foreach 不适用于类型'java.util.Map': -
for(DocumentSnapshot ds: document.getData())
所以然后我尝试了这个: -
Map<String, Object> myMap = (Map<String, Object>) document.getData();
String name = ""; //don't know how to get key i.e(clamp,gear) as i can't pass all of them.
String url = (String) myMap.get("url");//url returns null
这是我的代码:-
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("categoryType").document("Hardware");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d(TAG, "DocumentSnapshot data: " + document.getData());//see log below
Map<String, Object> myMap = (Map<String, Object>) document.getData();
String name = "";
String url = (String) myMap.get("url");
ItemCategory category = new ItemCategory(name,url);
itemCategoryList.add(category);
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
itemCategoryAdapter.notifyDataSetChanged();
}
});
Log.d 打印:-
{Hammer={url=https://someURL}, Nail={url=https://someURL}, Shovel={url=https://someURL}}
所以简而言之,我想要的是:-
name = "Hammer"
url = "someUrl",
名称 = “钉子”
url = “someurl”
解决方案
首先,您必须获取 Clamp 映射,然后使用它来获取其 url 属性。这是伪代码,不是完整代码,但说明了您需要做什么。为简洁起见,缺少地图上的泛型:
// get the document data map from the snapshot
Map data = snapshot.getData();
// get the Clamp field, which is an object field, so it will arrive as a Map
Map clamp = (Map) data.get("Clamp");
// get the String value of the url property on the object
String url = (String) clamp.get("url");
推荐阅读
- javascript - ReactJS - ant design - 用布局修复页脚
- ios - 在同一 ViewController 的第二个 CollectionView 中选择单元格时更新一个 UICollectionView
- python - Pandas 数据框,ValueError:形状不匹配:无法将对象广播到单个形状
- sql - IF 条件执行查询,否则根据计数执行其他查询
- c# - 将大字符串参数传递给外部应用程序
- python - 利息日前几天的数量总和
- javascript - 保存在本地存储中的结帐 ID 出现问题
- ios - 在 Swift 中使用自定义模型将 CoreData 模型添加到现有项目的最佳方法
- .htaccess - .htaccess 一般格式的 http 重定向到带有所有子域限制的 https
- sql-server - 比较同一数据库表中的 2 列