如何使用Java遍历Map中的数据

时间:2019-08-04 13:39:48

标签: java firebase firebase-realtime-database

从Firebase数据库中获取数据,并将其添加为Map对象。现在,我需要遍历每个键的值,以便可以从中获取子数据。这是我的数据库结构,代码正在使用:

enter image description here

    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_longitudestation_name等等。

1 个答案:

答案 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));
    }
}