Firebase onChildAdded正在多次触发
问题描述:
我有一个ListView
,每行包含多个EditText
和保存Button
。Firebase onChildAdded正在多次触发
在ShowOrder activty我正在从火力地堡
public void getItemsOrderDetails(final String key){
orderDetailsRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
arrayLength = dataSnapshot.getChildrenCount();
String itemN="", discription="", qty="", pcsCtn="", ctnWt="", compileStatus="", palletN="", ttlCtn="";
if(!key.equals("costumerName") && !key.equals("dateOfDelivery") && !key.equals("dateOfOrder") && !key.equals("orderN") && !key.equals("remarks") && !key.equals("status")){
if(dataSnapshot.child(key).hasChild("itemNumber")){
itemN= dataSnapshot.child(key).child("itemNumber").getValue().toString();
}
...
... {downloading all data}
...
itemsClass= new ItemsClass(orderNumber, itemN, discription, pcsCtn, ttlCtn, ctnWt, qty, compileStatus, palletN);
itemsClassArrayList.add(itemsClass);
adapter.notifyDataSetChanged();
}
获取数据我展示在adapter
所有的数据,问题是,当我想更新onChildAdded
是beeing多次触发数据。
这是适配器更新部分:
private void updateData(ViewHolder vh, String orderN){
showOrder.itemsClassArrayList.clear();
updateStatus="idle";
ordersRef.child(orderNumber).child(itemN).child("palletNo").setValue(pallete);
ordersRef.child(orderNumber).child(itemN).child("pcsPizza").setValue(untCtn);
ordersRef.child(orderNumber).child(itemN).child("compileStatus").setValue(collected);
ordersRef.child(orderNumber).child(itemN).child("drink").setValue(ctnWt);
ordersRef.child(orderNumber).child(itemN).child("ttlWt").setValue(pltWt);
ordersRef.child(orderNumber).child(itemN).child("ttl").setValue(ttlCtn);
updateStatus= "update";
//showOrder.adapter.clear();
}
我发现那是什么,如果我只更新一个child
(删除所有其他)onChildAdded
将只更新一次。 所以我不明白我如何更新所有出多个更新,如果任何人作为一个想法。
谢谢
答
这可能不是你的问题的完整解决方案,但几件事情打动了我马上:
你可以(也应该)加载和存储完整的对象在数据库中,所以除了单独读写每个孩子(例如你的ItemsClass对象的),你应该保存您的项目,像这样:
ordersRef.child(orderNumber).child(itemN).setValue(myItem)
其中myItem是之前已经填充了数据ItemsClass的一个实例。
以类似的方式,加载数据应该像这样做(取决于orderDetailsRef点,见下文!):
public void onDataChange(DataSnapshot dataSnapshot) {
ItemsClass items = dataSnapshot.getValue(ItemsClass.class);
}
另外,你提到onChildAdded得到多次调用,但在你的榜样,你正在使用ValueEventListener的onDataChange方法。
您能给出一个完整的代码示例吗?您发布的内容缺乏解决方案的相关部分。让我知道你的代码在加载和保存我建议的方式时的行为。