Android Firebase检索值

时间:2017-03-17 18:27:47

标签: android firebase firebase-realtime-database

我试图从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;
    }

}

1 个答案:

答案 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());
    }
});