我想使用微调器显示特定用户名下的键,但不幸的是它没有向微调器返回任何内容。我用一个数组来存储用户名下的键值。 这是我的数据库结构
我们说我是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;
}
答案 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
。