在我的应用中,我使用了Firebase数据库并在子级中存储了userID,并将子级的值设置为用户名以获取当前用户的用户名。现在我使用addValueEventListener从数据库中获取用户名。这是我的Firebase结构。
代码如下。
checkUsername.child("check").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
currentUser = dataSnapshot.child(getUserID()).getValue(String.class);
Log.d(TAG, "onDataChange: currentUser = " + currentUser);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
调试时,String currentUser
返回null。
答案 0 :(得分:0)
由于您已在check
节点添加了valueEventListener,因此再次获取子节点是没有意义的(因为用户ID是check
节点的关键而不是单独的子节点。)
而是尝试直接调用dataSnapshot.getChildren();
来获取更新数据的完整列表并迭代它以获得您需要的任何键值。
像这样,
checkUsername.child("check").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
String current value = dataSnapshot.getValue(String.class);
Log.d("TAG", "onDataChange: " + current value);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
此特定用例中的另一个选项是添加ChildEventListener并在onChildAdded()
方法中获取值。
答案 1 :(得分:-2)
伙计们我找到了答案。在问到这个问题之前,我只使用了compile 'com.google.firebase:firebase-core:11.0.4'
我的firebase依赖项。现在我已将compile 'com.google.firebase:firebase-database:10.0.1'
添加到我的依赖项中,现在它可以正常运行...