Google cloud firestore 从Firestore获取多个数据
上面是我在Firestore中的数据库。可以看到,有2个字符串和2个(或更多)数组作为字段 我将获取数据,将其转换为不同的图形 例如:1。显示所有用户所有章节总和的图表 2.显示所有用户“第1章”总和的图表。 3.显示所有章节平均值的图表等 根据用户的选择,这些图表将在不同的活动中显示,并针对该活动进行计算 现在我的问题是如何访问这些数据并将其用于各种活动 我已经尝试使用HashMap>分别存储phonenumb、chapter(x)和chapter(x)的值 以下是访问数据的代码:Google cloud firestore 从Firestore获取多个数据,google-cloud-firestore,hashmap,singleton,Google Cloud Firestore,Hashmap,Singleton,上面是我在Firestore中的数据库。可以看到,有2个字符串和2个(或更多)数组作为字段 我将获取数据,将其转换为不同的图形 例如:1。显示所有用户所有章节总和的图表 2.显示所有用户“第1章”总和的图表。 3.显示所有章节平均值的图表等 根据用户的选择,这些图表将在不同的活动中显示,并针对该活动进行计算 现在我的问题是如何访问这些数据并将其用于各种活动 我已经尝试使用HashMap>分别存储phonenumb、chapter(x)和chapter(x)的值 以下是访问数据的代码: Colle
CollectionReference chemistry = db.collection("RESULTS").document("Summary").collection("ChemistryVII");
chemistry
.whereEqualTo("school", "Test School")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (DocumentSnapshot document : task.getResult()) {
Map<String, Object> map = document.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getKey().contains("chapter")) {
if (outer.isEmpty() || !outer.containsKey(map.get("phonenumb"))) {
Map<String, Object> inner = new HashMap<>();
inner.put(entry.getKey(), entry.getValue());
String phonenumb = map.get("phonenumb").toString();
outer.put(phonenumb, inner);
} else {
Map<String, Object> inner = new HashMap<>();
inner.put(entry.getKey(), entry.getValue());
String phonenumb = map.get("phonenumb").toString();
outer.put(phonenumb, inner);
}
}
}
}
//Toast("Outer Details " + outer);
schoolGraph();
}
});
CollectionReference chemistry=db.收集(“结果”).文件(“摘要”).收集(“化学VII”);
化学
.whereEqualTo(“学校”、“测试学校”)
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
对于(DocumentSnapshot文档:task.getResult()){
Map=document.getData();
对于(Map.Entry:Map.entrySet()){
if(entry.getKey()包含(“章节”)){
if(outer.isEmpty()| |!outer.containsKey(map.get(“phonenumb”)){
Map inner=新的HashMap();
inner.put(entry.getKey(),entry.getValue());
字符串phonenumb=map.get(“phonenumb”).toString();
外部。放置(phonenumb,内部);
}否则{
Map inner=新的HashMap();
inner.put(entry.getKey(),entry.getValue());
字符串phonenumb=map.get(“phonenumb”).toString();
外部。放置(phonenumb,内部);
}
}
}
}
//吐司(“外部细节”+外部);
schoolGraph();
}
});
但是,这将不起作用,因为给定键(phonenumb)可能有多个条目
试图了解访问此类数据并将其用于多个活动的最佳方式。哈希映射键是唯一的。每次添加具有相同键的新对象时,具有相同键的旧值将被覆盖 我认为这部分的逻辑是正确的:
if (outer.isEmpty() || !outer.containsKey(map.get("phonenumb"))) {
Map<String, Object> inner = new HashMap<>();
inner.put(entry.getKey(), entry.getValue());
String phonenumb = map.get("phonenumb").toString();
outer.put(phonenumb, inner);
您不需要outer.put(phonenumb,inner)代码>,因为内部已存在,并且具有章节的总和
在这里,外部有键“phonenumber”,您只需在内部映射中插入新条目sum:internal[chapter]=sum
您需要类似于outert[phonenumb][chapter]=sum的东西
phonenumb是学生的还是学校的?您说将有多个条目具有相同的电话号码。你能举第二个例子吗?Hi Philip,phonenumb是学生的。为了回答下一个问题,当学生尝试多个章节时,数据库将为每个学生提供多个数组。例如,第1章=[10,5,5,7,7,8],第2章=[10,5,5,7,7,8],第3章=[5,6,4,3,6,7]等等。因此,虽然内部地图将有k:Chapter1,v:[10,5,5,7,7,8];k:Chapter2,v:[10,5,5,7,7,8]等,外部映射键将重复phonenumb(k:5100351003);因此,我们正在寻找这个问题的替代解决方案。
Map<String, Object> inner = new HashMap<>();
inner.put(entry.getKey(), entry.getValue());
String phonenumb = map.get("phonenumb").toString();
outer.put(phonenumb, inner);