我在UserNode中存储用户详细信息'firstname'和'lastname'。但是当我想要检索那些细节时,没有数据被检索。我在互联网上尝试了几乎所有解决方案,但没有解决我的问题。这是我检索当前用户数据的代码:
FirebaseUser userr = FirebaseAuth.getInstance().getCurrentUser();
if (userr != null) {
String name = userr.getDisplayName();
Log.e("value", name);
}
但它说“println需要一条消息”
我也试过这个但没有发生任何事情:
DatabaseReference DataRef;
DataRef = FirebaseDatabase.getInstance().getReference().child("UserNode");
DataRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String acctname = (String)dataSnapshot.child("firstname").getValue();
Log.e("name", acctname);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
] 1
请帮帮我,我被困住了
答案 0 :(得分:0)
请阅读how to retrieve data from firebase。我认为你有一个问题,因为你没有类模型。
您的步骤:
使用监听器(来自docs的示例):
// Attach a listener to read the data at our posts reference
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Post post = dataSnapshot.getValue(Post.class);
System.out.println(post);
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
请参阅其他答案:How to retrieve data from one single userID Firebase Android和retrieving data from firebase android
答案 1 :(得分:0)
使用 FirebaseUser
:
FirebaseUser
实施UserInfo
并在UserInfo
的{{3}}文档中说明
返回用户的显示名称(如果有)。
因此,如果未设置显示名称,getDisplayName()
可能会返回null
。在这种情况下,FirebaseUser.getDisplayName()
收到null
作为消息,因此打印 println需要一条消息
使用您自己的结构:
使用Log.e()
代替使用类型转换,而不是:
String acctname = dataSnapshot.child("firstname").getValue(String.class);
答案 2 :(得分:0)
您正在阅读ValueEventListener
的用户集合。由于[使用值事件读取列表的Firebase文档](侦听值事件)说明:
虽然建议使用
ChildEventListener
来读取数据列表,但有时候将ValueEventListener
附加到列表引用是有用的。将
ValueEventListener
附加到数据列表会将整个数据列表作为单个DataSnapshot
返回,然后您可以循环访问这些数据。即使只有一个[子节点],快照仍然是一个列表;它只包含一个项目。要访问该项目,您需要循环结果。
所以在你的代码中:
DatabaseReference DataRef;
DataRef = FirebaseDatabase.getInstance().getReference().child("UserNode");
DataRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String acctname = (String)childSnapshot.child("firstname").getValue();
Log.i("name", acctname);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});