检索firebase字段的父级和子级

时间:2018-04-03 19:33:09

标签: android firebase android-studio firebase-realtime-database

我正在尝试获取Firebase数据库中字段的父值及其子项。 firebase database 澄清:

我想循环浏览快照以找到想要通过他或她的ID登录的用户,之后我想获得该ID的父级(即用户是女性还是男性)之后我想获得州和名称。

所以我正在做的是:

database=FirebaseDatabase.getInstance();
rootRef = database.getReference();
users = rootRef.child("Users");

然后

users.orderByChild("name").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot child : dataSnapshot.getChildren()) {
            if (child.getValue().equals(curUser.getUid())) {
                String gender = child.getKey().toString();
                currentPolUser.setuGender(gender);
                currentPolUser.setuName(child.child("Name").getValue().toString());
                Log.d("FirebaseUsers", "SUCCESSSSSS: "+currentPolUser.getuName() + " " + currentPolUser.getuGender());
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

问题是child.getValue()返回一个无法与用户ID字符串进行比较的对象。

1 个答案:

答案 0 :(得分:1)

试试这个:

 ref.child("Users").orderByChild("name").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child : dataSnapshot.getChildren()) {
                String gender = child.getKey();
                for(DataSnapshot finalChild : child.getChildren()){
                    if (finalChild.getKey().equals(curUser.getUid())) {
                        HashMap<String, Object> map = (HashMap<String, Object>) finalChild.getValue();
                        String name = (String) map.get("name");
                        currentPolUser.setuGender(gender);
                        currentPolUser.setuName(name);
                        Log.d("FirebaseUsers", "SUCCESSSSSS: "+currentPolUser.getuName() + " " + currentPolUser.getuGender());

                        Log.e("TTT", name);
                    }
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });