我Android Studio中工作,并检索从火力地堡以下数据:如何在检索Firebase数据后循环访问HashMap?
coloursets:
default:
name: "Default colour set"
description: "Default set of colours"
colours:
white:
red: 255
green: 255
blue: 255
name: "white"
black:
red: 0
green: 0
blue: 0
name: "black"
我检索它像这样:
public void initialiseColourSet(ValueEventListener listener) {
if(this.key == null) return;
DatabaseReference mColourSetReference = FirebaseDatabase.getInstance().getReference()
.child("coloursets").child(this.key);
mColourSetReference.addListenerForSingleValueEvent(listener);
}
,其中 “关键” 是设置为“默认”,“听众”是:
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<ChartColour> colourList= new ArrayList<>();
Map<String, HashMap> objectMap = (HashMap<String, HashMap>) dataSnapshot.getValue();
// SOMETHING NEEDS TO GO HERE - SEE BELOW
}
}
ColourSet类ha S中的以下内容:
String key, name, description;
ArrayList<ChartColour> colours = new ArrayList<>();
所以,我要循环“ObjectMap的”,让colourSet名称和描述,然后得到的颜色列表到本地变量colourList,然后将其用于设置“颜色'在ColourSet对象中。
我只是无法在侦听器中获得正确的循环。我查了很多答案,但没有一个似乎适用于我的案例。
目前我已在听众中的以下内容:
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<ChartColour> colourList= new ArrayList<>();
Map<String, HashMap> objectMap = (HashMap<String, HashMap>) dataSnapshot.getValue();
for (Map.Entry<String, HashMap> entry : objectMap.entrySet()) {
switch (entry.getKey()) {
case "name":
mColourSet.setName(String.valueOf(entry.getValue()));
break;
case "description":
mColourSet.setDescription(String.valueOf(entry.getValue()));
break;
case "colours":
// Need some kind of FOR LOOP here
ChartColour colour = new ChartColour();
/*
colour.setKey(??);
colour.setName(??);
colour.setRed(??);
... etc ... */
colourList.add(colour);
// END OF FOR LOOP
mColourSet.setColours(colourList);
}
}
}
});
所以,我只是不知道我需要把在for循环的监听器,以循环在颜色。我到目前为止所尝试的所有东西都只是给了我一个闪烁的红线,而没有任何解释什么是错的。
任何人都可以告诉我吗?感谢您提供任何帮助。
我不确定你的红色曲线在哪里,但你的'HashMap'作为外部映射的值类型没有设置泛型类型,这意味着键和值都解析为'Object' 。 – Dave
谢谢。你的意思是objectMap吗?他们应该设置什么? – Sharon
我的意思是在'Map'中,'HashMap'部分没有指定类型参数,所以它实际上是'HashMap