从datasnapshot获取特定的值

时间:2018-12-18 20:00:07

标签: android firebase firebase-realtime-database

我有一个用户数据库,每个用户都有一个随机ID。每个用户都有我想要获得其价值的数据。有时我只需要一个特定的用户,有时我想要所有用户的数据。该数据库如下所示:

database
   |
   |__users
        |____uid1
              |_____dataKey1: value1
              |_____dataKey2: value2
              |_____dataKey3: value3

如果我只需要dataKey1的value1,如何获取它?目前,我的代码返回了所有uid1子级的映射:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference ref= rootRef.child("users").child("uid1");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                value= ds.getValue().toString();
                Log.d("TAG", values);


            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    imageNamesRef.addListenerForSingleValueEvent(eventListener);

在我得到的日志中:

TAG: value1
TAG: value2
TAG: value3

但我想要

TAG: value1

我在哪里过滤出想要的键?

1 个答案:

答案 0 :(得分:1)

尝试以下操作:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref= rootRef.child("users").child("uid1");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      String value = dataSnapshot.child("dataKey1").getValue().toString();
      Log.d("TAG", value);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
imageNamesRef.addListenerForSingleValueEvent(eventListener);

您可以访问子级uid1,因此无需获取dataKey1的值。