База данных Android Firebase продолжает обновлять значение - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь получить оценку авторов из базы данных 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 Util приватная статическая база данныхReference db;

public static void updateUsersScore(String id, int score)
{
    db = FirebaseDatabase.getInstance().getReference();
    db.child("Users").child(id).child("score").setValue(score);
}

1 Ответ

1 голос
/ 06 марта 2019

Чтобы решить эту проблему, измените следующую строку кода:

database.child("Users").child(authorID).addValueEventListener(/* ... */);

до

database.child("Users").child(authorID).addListenerForSingleValueEvent(/* ... */);

Получить данные только один раз. Использование addValueEventListener() означает, что вы получаете данные в реальном времени, и для каждого изменения вызывается onDataChange().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...