运行此代码时:
private void getData(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
Log.d(TAG, "UserID inside getData: "+userID);
Log.d(TAG, "User Name inside getData: "+ds.child(userID).child("name").getValue());
Log.d(TAG, "DS inside getData: "+ds.child(userID));
hospitalCity = String.valueOf(ds.child(userID).child("city").getValue());
Log.d(TAG, "User city inside getData: "+ds.child(userID).child("city").getValue());
break;
}
}
日志显示:
getData中的UserID:Lsncj8CIsfTQXc7E425AtLuDI5v2
getData中的用户名:null DS里面的getData:DataSnapshot {key = Lsncj8CIsfTQXc7E425AtLuDI5v2,value = null}D / DonorList:getData中的用户城市:null
这是数据库:
正如您所看到的,它会获取密钥,但值为null
,尽管数据库显示其中包含值。
答案 0 :(得分:2)
为了获取Hospital
节点下的数据,您需要更改以下参考:
hospitalDatabase = FirebaseDatabase.getInstance().getReference();
与
hospitalDatabase = FirebaseDatabase.getInstance().getReference().child("Hospital");
要在getData()
方法中获取数据,请使用以下代码:
private void getData(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String key = ds.getKey();
String city = ds.child("city").getValue(String.class);
String name = ds.child("name").getValue(String.class);
}
}
ds.getKey()
将返回userId
ds.child("city").getValue(String.class)
将返回城市。
ds.child("name").getValue(String.class)
将返回名称。
答案 1 :(得分:1)
尝试:
private void getData(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
Log.d(TAG, "UserID inside getData: "+userID);
Log.d(TAG, "User Name inside getData: "+ds.child("name").getValue());
Log.d(TAG, "DS inside getData: "+ds.child(userID));
hospitalCity = String.valueOf(ds.child("city").getValue());
Log.d(TAG, "User city inside getData: "+ds.child("city").getValue());
break;
}
}
ds.getKey()
这应该返回userID
使用.getChildren()
,您正在做的事情更深入一层
如果您只查找一个值,则无需getChildren()
,只需将ValueEventListener()
设置为例如:
hospitalDatabase.child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
hospitalCity = String.valueOf(dataSnapshot.child("city").getValue());
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
我认为由于那里有break
,你只关注一个值。