如何在密钥下获取密钥值?

时间:2017-09-27 08:50:04

标签: android firebase firebase-realtime-database

我想使用微调器显示特定用户名下的键,但不幸的是它没有向微调器返回任何内容。我用一个数组来存储用户名下的键值。 这是我的数据库结构

Database structure

我们说我是rexyou0831,我只想检索用户名下的2个用户名,但我的代码没有回复列表。 un是我当前的用户名变量。如果您有任何想法,请与我分享,谢谢。

赫斯'我的代码

db = FirebaseDatabase.getInstance();
cref = db.getReference("chat");

 public ArrayList<String> retrieve()
{
    final ArrayList<String> Student=new ArrayList<>();
    cref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot c:dataSnapshot.getChildren())
            {

                if(c.getKey().equals(un)){

                    for(DataSnapshot d: dataSnapshot.getChildren()){

                        Student.add(d.getKey());

                    }

                }else{

                    Student.clear();
                }

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    return Student;
}

1 个答案:

答案 0 :(得分:2)

要使用您的用户名获取这些用户名,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("chat").child("rexyou0831");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String userName = ds.getKey();
            list.add(userName);
        }
        Log.d("TAG", list);
    }

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

你的出局将是:[gigi1212,mario123]

注意,onDataChenge()被称为异步,这意味着甚至在将这些键添加到列表之前就会调用它。作为一个结论,您需要在onDataChenge()内声明并使用该列表,否则为null