我正在尝试从Firebase实时数据库中获得作者评分。我成功获得了得分值。然后我在这个值上加上100并插入新值,但是当我插入得分值时,例如,如果得分为500(而不是600)而不是更改为600,它将更改为600、700、800。如果我以addExtraScore
方法显示Toast,它将按预期显示一次。
活动
private void getAuthorScore()
{
database = FirebaseDatabase.getInstance().getReference();
database.child("Users").child(authorID).addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
User author = dataSnapshot.getValue(User.class);
authorScore = author.getScore();
addExtraScore();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
private void addExtraScore()
{
int score = authorScore + 100;
FirebaseUtil.updateUsersScore(authorID, score);
}
Firebase实用程序 私有静态DatabaseReference db;
public static void updateUsersScore(String id, int score)
{
db = FirebaseDatabase.getInstance().getReference();
db.child("Users").child(id).child("score").setValue(score);
}
答案 0 :(得分:1)
要解决此问题,请更改以下代码行:
database.child("Users").child(authorID).addValueEventListener(/* ... */);
到
database.child("Users").child(authorID).addListenerForSingleValueEvent(/* ... */);
仅一次获取数据。使用addValueEventListener()
意味着您正在实时获取数据,并且每次更改onDataChange()
都会被调用。