我的数据库:
{
"Shops": {
"Title": {
"1": "Footlocker",
"2": "Nike Store",
"3": "Adidas Store"
},
"Lat": {
"1": "123",
"2": "123",
"3": "123"
},
"Lon": {
"1": "123",
"2": "123",
"3": "123"
}
}
}
数字" 1"," 2"和" 3"代表一家商店。例如" 1"商店有" Footlocker"标题和" 123"纬度(可能这应该是一个数字,但这不是我的问题)。
我的目标是获取Hashmap<String,String>
中的所有标题(关键是&#34; 1&#34; ...值&#34; Footlocker&#34;等等...)
所以我创建了对#34; Title&#34;的引用。键入数据库并添加监听器
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Shops").child("Title");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String,String> map = (HashMap<String,String>) dataSnapshot.getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
您可以想象上面的代码会引发异常,因为无法将ArrayList强制转换为HashMap。
我的问题是,我不应该使用数字作为键,将标题作为值来获取HashMap吗?
答案 0 :(得分:3)
您已经展示了自己的数据库&#34;作为JSON文档。
如果你使用JSON解析器解析它,当然,你可能期望TreeMap是准确的,但是在Firebase的术语中,我认为你已经混淆了#34;索引&#34;您认为应该是&#34;键&#34;的元素。
所以,你得到一个清单,而不是地图。没什么大不了的,真的。您仍然可以迭代元素
如果你想要(有些)更好的结构,我会建议
Stores
Footlocker
Lat
Lon
Nike
...
Adidas
...
或者在Frank评论时,使用Firebase可以生成的自然键排序。
Stores
<id_0>
name: "Footlocker"
Lat: 0.00
Lon: 0.00
<id_1>
name: "Nike"
...
<id_2>
name: "Adidas"
...
补充一点。不要使用HashMap,使用对象来表示数据
public class Store {
String name;
Double lat, lon;
public Store() {
// Required empty-constructor
}
// getters & setters...
}