在过去的 5 天里,我一直在尝试从我的 firebase 数据库中检索数据字段,但没有成功。这是我的数据库的样子:
获取数据的代码:
private void alterTextView(final String id) {
if(id!=null) {
mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
String name = (String) userInformation.getName();
Log.d("Main Activity",name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mWelcomeUserMessage.setText("Welcome, "+name);
}
}`
我不知道为什么名称为“null”(请参阅日志)。 谁能告诉我我做错了什么?
PS:我在我的 UserInformation.java 类中定义了一个空白的默认构造函数、getter 和 setter。
此外,mDatabase 初始化如下:
mDatabase = FirebaseDatabase.getInstance().getReference();
最佳答案
dataSnapshot.getValue(Class)
只会加载和设置值到公共(public)字段。我看到您已经有了默认构造函数。
公开 UserInformation 类中的名称字段。还要确保调用 getValue 的快照是 UserInformation 类的有效 JSON 表示形式,并且具有完全相同的“名称”字段(它必须与类中的名称字段完全匹配)。
请注意:
addValueEventListener
添加一个监听器,当数据可用时将调用该监听器。
请注意,调用 onDataChange
后数据可用。这就是为什么您应该在从 DataSnapshot
获取所需数据后立即设置文本的原因。像那样:
private void alterTextView(final String id) {
if(id!=null) {
mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
String name = (String) userInformation.getName();
Log.d("Main Activity",name);
runOnUiThread(new Runnable() {
@Override
public void run(){
mWelcomeUserMessage.setText("Welcome, "+name);
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
关于android - 无法从 Firebase 数据库中检索数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44389278/