从 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
等。
最佳答案
由于您拥有的每个子节点都是另一个 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));
}
}
关于java - 如何使用Java循环遍历Map中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347027/