从Firebase数据库中获取数据,并将其添加为Map对象。现在,我需要遍历每个键的值,以便可以从中获取子数据。这是我的数据库结构,代码正在使用:
public void gettingStationDate() {
// Read from the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("station");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
Log.e(TAG, "Value is: " + map);
assert map != null;
for (Map.Entry<String, Object> entry : map.entrySet()) {
Log.e("The Result", entry.getKey() + "/" + entry.getValue());
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
这段代码给我结果作为键,值是这样的:-LlRGuwBNe2-S_MHn2DW/{station_longitude=30.854333, station_name=الاصلاح الزراعى, station_latitude=29.313847, station_geohash=stjyy07mw14h}
现在,我需要做的是获取显示值的内部值,如statin_longitude
,station_name
等等。
答案 0 :(得分:1)
由于您拥有的每个子节点都是另一个JSON对象,因此Map
中的每个值都是另一个Map
。而且由于您所有的值都是字符串,所以这次是Map<String,String>
。
因此,要获取特定值,您可以执行以下操作:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
assert map != null;
for (Map.Entry<String, Object> entry : map.entrySet()) {
Log.i("The key", entry.getKey());
Map<String,String> values = (Map<String,String>) entry.getValue();
Log.i("station_name", map.get("station_name"));
}
}
使用DataSnapshot
的方法来完成此操作更惯用:
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot stationSnapshot: dataSnapshot.getChildren()) {
Log.i("The key", stationSnapshot.getKey());
Log.i("station_name", stationSnapshot.child("station_name").getValue(String.class));
}
}