我正在尝试使用Firebase为餐馆和酒吧创建评分系统。到目前为止,我可以阅读和编写个人评分。我遇到的问题是,为了计算特定餐厅的平均评分,我需要获得存储的评分数量和所有评分的总价值。目前我正在努力存储收视率。这里是我的代码onDataChange卡在无限循环中
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,并再次形成无限循环。 我的问题是,是否有任何更改,我可以为了防止这种情况,甚至不同的方式来配置这个? 感谢
UPDATE
JSON代码如下:
{
"ratings" : {
"porterhouse" : {
"numRating" : "0",
"totalRating" : "0"
}
}
安置自己的JSON结构 –
@MartinDeSimone更新以显示的JSON代码 – EoghanBradshaw
relavent一部分这将真正使基于循环因为ChildEventListener将监听该特定路径上的所有更改,并且在侦听器内部更改该路径会一次又一次触发它。 –