Я пытаюсь получить оценку авторов из базы данных Firebase в реальном времени. Я успешно получаю значение счета. Затем я добавляю 100 к этому значению и вставляю новое значение, однако, когда я вставляю значение оценки, оно продолжает увеличиваться на 100, например, если оценка была равна 500 вместо изменения на 600, она изменится на 600, затем на 700, затем на 800 и т. д. Если я покажу тост в методе addExtraScore, он отобразится один раз и так, как предполагалось.
Деятельность
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);
}




Чтобы решить эту проблему, измените следующую строку кода:
database.child("Users").child(authorID).addValueEventListener(/* ... */);
к
database.child("Users").child(authorID).addListenerForSingleValueEvent(/* ... */);
Чтобы получить данные только один раз. Использование addValueEventListener() означает, что вы получаете данные в режиме реального времени и для каждого изменения onDataChange() вызывается снова.
Ха-ха, я разработчик iOS, и у меня была такая же проблема, и этот ответ помог мне найти решение. Большое спасибо! :)