我是初学者,我正在制作一个简单的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) {
}
});
}
答案 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。
在了解了您对回调的需求后进行编辑 -
要添加回调,有几个步骤,
使用以下代码打开一个新的java类 -
public interface FireBaseCallbacks {
interface GetScoreCallback {
public void onGetScoreComplete(Integer score)
}
}
将回调参数添加到updateScore方法 -
private void updateScore(FireBaseCallbacks.GetDevicesCallback callback) {
...
}
在获得值 -
后调用callback参数Integer totalscore = dataSnapshot.getValue(Integer.class);
callback.onGetScoreComplete(totalscore)
在您的活动中的某个地方调用该方法(在您希望更新分数时),将此作为参数告诉回调在哪里(关于活动) -
updateScore(this)
现在进行最后一步,将FireBaseCallbacks.GetScoreCallback实现到您的活动中,然后您将被迫实施其onGetScoreComplete方法。实现它,在里面你得到分数作为参数,做任何你想做的事情:)
希望这会有所帮助,让我知道。
答案 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
中找到它,你可以浏览这个链接