0
我有下面的代码,并且firebase中有2条记录。addListenerForSingleValueEvent被执行两次,每个记录
ref.child("Orders").orderByChild("orderid").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
final ArrayList<OrderBean> offlineOrders = db.getWaterOrder();
if (offlineOrders != null && !offlineOrders.isEmpty()) {
for (OrderBean eachrow : offlineOrders) {
flag = eachrow.getFlag();
if (flag.equals("M")) {
if (postSnapshot != null) {
if (postSnapshot.child("id").getValue().equals(orderid)) {
postSnapshot.getRef().removeValue();
OrderBean orderbean = new OrderBean(orderid, vname, quan, price, date, time);
ref.child("Orders").push().setValue(orderbean); //push the record into firebase
orderslist.add(orderbean);
orderAdapter.notifyDataSetChanged();
}
else {
.......
OrderBean orderbean = new OrderBean(orderid, vname, quan, price, date, time);
orderslist.add(orderbean);
}
}
}
else {
........
OrderBean orderbean = new OrderBean(orderid, vname, quan, price, date, time);
orderslist.add(orderbean);
}
}
db.editOrderFlag(orderid);
}
else {
..........
OrderBean orderbean = new OrderBean(orderid, vname, quan, price, date, time);
orderslist.add(orderbean);
}
}
OrderAdapter orderAdapter = new OrderAdapter(Myorders.this, orderslist);
listView.setAdapter(orderAdapter);
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setStackFromBottom(false);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我认为
ref.child("Orders").orderByChild("orderid").addListenerForSingleValueEvent(new ValueEventListener() {
将得到每个记录执行一次。但是每条记录都会执行两次。结果我的订单列表有重复,因此我的适配器显示每个记录两次。
任何人都可以帮助我了解我的代码有什么问题吗?
谢谢
萨蒂亚
谢谢......我想我明白你在说什么。我想,我将不得不在我的offlineOrders if子句中修改代码。 – Satya