java - 如何使用Java循环遍历Map中的数据

标签 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 等。

最佳答案

由于您拥有的每个子节点都是另一个 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/

相关文章:

java - Android - Firebase 访问级别

java - 以编程方式设置 logback.xml 路径

java - 在什么情况下读取 InputStream.read() 返回正整数,什么时候返回 -1?

firebase - 如何通过 API 获取 Firebase 的所有主题列表?

ios - 如何在 iOS 的应用程序内打开/关闭 GCM 推送通知的设置功能?

android - Firebase 两种数据库(iOS、Android)

Firebase - 按自定义功能排序(距离)

java - 在 Servlet 之外使用 HttpServletRequest

java - 我要把我的 socket 改成什么?

java - 让 Firebase 与 Java 一起工作,而不是 Android