gpt4 book ai didi

android - onDataChange 陷入无限循环

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

我正在尝试使用 Firebase 创建餐厅和酒吧的评级系统。到目前为止,我能够阅读和书写个人评分。我遇到的问题是,为了计算特定餐厅的平均评级,我需要获取存储的评级数量和存储的所有评级的总值(value)。目前我正在努力存储评级数量。这是我的代码

Query RetrieveRating =  databaseReference.child("ratings").child("porterhouse");
RetrieveRating.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot postSnapshot) {

//get data from snapshot
String data = postSnapshot.child("numRating").getValue().toString();

if (!data.equals(null)) {
String numRating = (String) postSnapshot.child("numRating").getValue();

count = Integer.valueOf(numRating);
count++;

ratingCounter = Integer.toString(count);

databaseReference.child("ratings").child("porterhouse").child("numRating").setValue(ratingCounter);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

发生的情况是,它获取当前存储的值,加 1 并将其写回数据库,但是每次存储时都会调用 onDataChange() 方法,一次又一次地加 1,从而生成一个无限循环。我的问题是,是否可以进行任何更改来防止这种情况,或者甚至可以采用不同的方式来配置此问题?谢谢

更新

json代码如下:

    {
"ratings" : {
"porterhouse" : {
"numRating" : "0",
"totalRating" : "0"
}
}

最佳答案

使用addListenerForSingleValueEvent

RetrieveRating.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot postSnapshot) {

//get data from snapshot
String data = postSnapshot.child("numRating").getValue().toString();

if (!data.equals(null)) {
String numRating = (String) postSnapshot.child("numRating").getValue();

count = Integer.valueOf(numRating);
count++;

ratingCounter = Integer.toString(count);



databaseReference.child("ratings").child("porterhouse").child("numRating").setValue(ratingCounter);

}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

您还应该使用 firebase 事务来递增计数器

关于android - onDataChange 陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43404184/

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