在登录节点下保存Firebase的总分数

时间:2018-03-20 07:11:26

标签: android firebase firebase-realtime-database

我是初学者,我正在制作一个简单的Android游戏,用户登录应用程序并玩游戏。游戏结束后,我想添加之前得分的用户当前得分,然后将此总得分存储在Firebase中,然后在用户下次游戏时再次检索得分。

我没有了解如何为每位登录的用户保存总分。

这是我的firebase json树 https://drive.google.com/file/d/1T7-x3TP1TaA8_ntwfoRNdb2oMGV_swl6/view?usp=sharing

 private void updateScore() {
  TotalScore =  new Firebase("https://bscitquiz.firebaseio.com/Users/" + username +"/highScore");
    TotalScore.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

                Integer totalscore = dataSnapshot.getValue(Integer.class);
                totalscore = totalscore + mScore;
               dataSnapshot.getRef().setValue(totalscore);
            HighScore.setText("" +totalscore);
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

}

2 个答案:

答案 0 :(得分:1)

您可以在数据库中将每个用户的分数保存在其名称下,并且每次都会更新。

android java代码是这样编写的 -

public static void updateScore(Integer score, String userId) {
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    ref.child("Users").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override public void onDataChange(DataSnapshot dataSnapshot) {
            Integer previousScore =  dataSnapshot.getValue(Integer.class);
            if (previousScore != null){
                previousScore = previousScore + score;
                dataSnapshot.getRef().setValue(previousScore);
            }
        }
        @Override public void onCancelled(DatabaseError databaseError) {
            Log.e("frgrgr", "onCancelled", databaseError.toException());
        }
    });
}

这样您就可以检索旧分数,更新分数并发送回数据库。

现在这样你只有每个用户下的得分值。

如果用户名为“用户”,则可以使用该用户名,如果其唯一,或者只为每个用户生成一个ID。

在了解了您对回调的需求后进行编辑 -

callback in android?

要添加回调,有几个步骤,

  1. 使用以下代码打开一个新的java类 -

    public interface FireBaseCallbacks {
    interface GetScoreCallback {
    public void onGetScoreComplete(Integer score)
        }
    }
    
  2. 将回调参数添加到updateScore方法 -

    private void updateScore(FireBaseCallbacks.GetDevicesCallback callback) {
        ...
    }
    
  3. 在获得值 -

    后调用callback参数
    Integer totalscore = dataSnapshot.getValue(Integer.class);
    callback.onGetScoreComplete(totalscore)
    
  4. 在您的活动中的某个地方调用该方法(在您希望更新分数时),将此作为参数告诉回调在哪里(关于活动) -

      updateScore(this)
    
  5. 现在进行最后一步,将FireBaseCallbacks.GetScoreCallback实现到您的活动中,然后您将被迫实施其onGetScoreComplete方法。实现它,在里面你得到分数作为参数,做任何你想做的事情:)

  6. 希望这会有所帮助,让我知道。

答案 1 :(得分:0)

您可以在用户下获得分数路径(例如:用户/用户ID /分数),您可以在每次完成游戏后更新分数。以下是javascript代码。

firebase.database().ref('User').child(userId).child('score').set(currentScore).then(result => {
    const user = snap.val()
    const userKey = snap.key
}).catch (function(err) {
    console.error(err)
})

此处currentScore是您要更新的值。

如果你想在android:https://firebase.google.com/docs/database/android/read-and-write

中找到它,你可以浏览这个链接