无法从Firebase数据库中检索数据字段
我一直试图在过去5天内从我的Firebase数据库检索数据字段,但没有取得任何成功。这是我的数据库看起来像:无法从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);
}
}`
我不知道为什么名字是“空”(参见日志)。 有人能告诉我我做错了什么吗?
PS:我在我的UserInformation.java类中定义了一个空白的默认构造函数,getters和setters。
另外,mDatabase被初始化为如下: mDatabase = FirebaseDatabase.getInstance().getReference();
dataSnapshot.getValue(Class)
只会负荷和设定值到公共字段。我看到你已经有一个默认的构造函数。
在UserInformation class public中创建名称字段。另外请确保您调用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) {
}
});
}
}
我做到了。现在,当我尝试使用dataSnapshot.toString()方法显示类时,没有问题。但是,当我尝试设置我的文本视图的文本时,它仍然是空白的。我使用常规的getter方法来获取名称。 –
@Yash请提供一些代码。您可能会在onDataChange方法中设置TextView的文本。你不能这样做,因为它是异步调用的。 –
我在最近更新的问题中提供了代码。它仍然显示为空 –
你能过去这里的.toString()你的dataSnapshot? –
我不明白..我没有.toString()为我的dataSnapshot。 我认为getValue()就足够了? –
它将打印一个带有键和值的json。 Log.d(TAG,“收到的数据:”+ dataSnapshot.toString()); –