gpt4 book ai didi

java - addListenerForSingleValueEvent 被多次触发

转载 作者:行者123 更新时间:2023-12-02 10:41:14 26 4
gpt4 key购买 nike

我在我的应用中使用 firebase 数据库。我正在使用 addListenerForSingleValueEvent Listner 来更新数据库中的数据。我发现数据没有正确更新,调试代码后发现监听器已经工作了5次!!!

            if (player1Score == player2Score) {
player1Reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.v("pointsDebug", "onDataChanged1");
long points = (long) dataSnapshot.child("points").getValue();
usersReference.child(player1Uid).child("points").setValue(points + 1);

usersReference.removeEventListener(this);
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
player2Reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.v("pointsDebug", "onDataChanged2");
long points = (long) dataSnapshot.child("points").getValue();
usersReference.child(player2Uid).child("points").setValue(points + 1);

usersReference.removeEventListener(this);
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

这是重复的日志:

10-20 17:03:43.841 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged1
10-20 17:03:43.841 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged2
10-20 17:03:43.881 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged1
10-20 17:03:43.881 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged2
10-20 17:03:43.921 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged1
10-20 17:03:43.921 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged2
10-20 17:03:43.971 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged1
10-20 17:03:43.971 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged2
10-20 17:03:44.691 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged1
10-20 17:03:44.701 19217-19217/com.mk.playAndLearn V/pointsDebug: onDataChanged2

数据库结构是这样的:

users
-user1
-....
-user2
-.....

最佳答案

删除监听器的最佳且最理想的方法是根据当前 Activity 的 Android 生命周期来执行此操作。

但是,您要删除 onDataChange() 内的监听器。我想这就是发生这种情况的原因。

onDataChange() 中删除此行:usersReference.removeEventListener(this);,或者删除 onDestory() 方法中的监听器:

@Override
protected void onDestroy() {
super.onDestroy();
usersReference.removeEventListener(YourActivity.this);
}

Android 将完成剩下的工作。

关于java - addListenerForSingleValueEvent 被多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52907061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com