我试图从Firebase获取一个值。
我正在使用这段代码来获取它,但我在score1上调用的所有方法都返回null。
private void onSignedInInitialize(String username) {
mUsername = username;
final DatabaseReference reference = mFirebaseDatabase.getReference();
Query query = reference.child("scores").orderByChild("username").equalTo(mUsername);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
Score scores1 = dataSnapshot.getValue(Score.class);
Log.d(TAG, " scores1 " + scores1 + " datasnapshot to String " + dataSnapshot.getValue().toString());
Log.d(TAG, " user " + scores1.getUsername());
Log.d(TAG, " user " + scores1.getUsername());
scoresTextView.setText(scores1.getScore());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我的Firebase结构类似于this
我在他们的文档中使用了这个示例(使用Post类),并且还在Google上进行了搜索,但我无法找到如何获得分数值。 谢谢你的回答。
这是分数类
public class Score {
private String username;
private String score;
public Score() {
}
public Score(String username, String score) {
this.username = username;
this.score = score;
}
public String getUsername() {
return username;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
}
答案 0 :(得分:0)
如数据库图像所示,Score
实例的数据库节点是位置scores
的子。更新您的代码,如下所示。
第二个问题是数据库中的score
是一个整数,而不是Score
类所期望的字符串。您必须更新数据库以包含字符串,或者更改Score
以将score
作为整数处理。此外,您的Score
类缺少username
的setter方法。
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
if (dataSnapshot.exists()) {
for (DataSnapshot snap : dataSnapshot.getChildren()) {
Score scores1 = snap.getValue(Score.class);
Log.d(TAG, " scores1 " + scores1 + " datasnapshot to String " + dataSnapshot.getValue().toString());
Log.d(TAG, " user= " + scores1.getUsername());
Log.d(TAG, " score= " + scores1.getScore());
scoresTextView.setText(scores1.getScore());
}
} else {
Log.e(TAG, "onDataChange: NO DATA");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, "onCancelled: " + databaseError.getMessage());
}
});