Android Firebase数据库不断更新价值

时间:2019-03-06 13:52:24

标签: java android firebase firebase-realtime-database

我正在尝试从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);
}

1 个答案:

答案 0 :(得分:1)

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

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

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

仅一次获取数据。使用addValueEventListener()意味着您正在实时获取数据,并且每次更改onDataChange()都会被调用。