繁体   English   中英

我如何将 dataSnapshot 放入 HashMap 并迭代 Firebase Android

[英]How do i put dataSnapshot into a HashMap and Iterate Firebase Android

我正在尝试将 DataSnapshot 对象转换为 HashMap,然后对其进行迭代以访问每个玩家的纬度经度和头像值。 因为在此之后我将使用这些值在地图上呈现标记。

数据库

另一个问题是是否可以从查询中排除用户本身? 我的意思是可以写 mydb.child("map").child("players").notequalto(username).addValueEventList ... 或者我是否必须在提取数据后用代码排除它?

    mydb.child("map").child("players").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                HashMap<String,Object> players= new HashMap();
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                players.put(childSnapshot.getKey(), childSnapshot.getValue());
            }
                    Log.d("players",dataSnapshot.getValue().toString());





            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

输出:

 D/players: {lifesuxtr={lat=40.8901741, long=29.3772963, avatar =petyr}, lastpeony={lat=40.89, long=29.37, avatar=dino}}

假设map节点是您的 Firebase 数据库根的直接子节点,要获取这些值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference playersRef = rootRef.child("map").child("players");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Map<Double, Double> players = new HashMap<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double lat = ds.child("lat").getValue(Double.class);
            double long = ds.child("long").getValue(Double.class);
            Log.d("TAG", lat + " / " + long);
            players.put(lat, long);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
playersRef.addListenerForSingleValueEvent(eventListener);

输出将是:

40.89 / 29.37
40.89 / 29.37

有了这些值,您现在可以添加标记。 回答你的问题,不,你不能在查询中使用否定。 Firebase 中没有notEqualTo()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM