首页 > 解决方案 > Android Firebase 数据库不断更新价值

问题描述

我正在尝试从 Firebase 实时数据库中获取作者分数。我成功获得了分值。然后我在这个值上添加 100 并插入新值,但是当我插入分数值时,分数值会不断增加 100,例如,如果分数为 500 而不是更改为 600,它将更改为 600,然后是 700,然后是 800 等。如果我在方法中显示 Toast,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 私有静态数据库参考数据库;

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

标签: javaandroidfirebasefirebase-realtime-database

解决方案


要解决此问题,请更改以下代码行:

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

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

只获取一次数据。使用addValueEventListener()它意味着您可以实时获取数据,并且每次更改onDataChange()都会被再次调用。


推荐阅读