我正在嘗試使用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將監聽該特定路徑上的所有更改,並且在偵聽器內部更改該路徑會一次又一次觸發它。 –