我有以下代码,firebase中有2条记录。
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() {
将为每条记录执行一次。但是每个记录都要执行两次。结果我的订单列表有重复,因此我的适配器显示每个记录两次。
任何人都可以帮我理解我的代码有什么问题吗?
谢谢
萨蒂亚
答案 0 :(得分:0)
这种情况正在发生,因为您正在循环两次。一旦在dataSnapshot
和offlineOrders
ArrayList上的第二个。因此,为了解决此问题,请从for loop
方法中取出onDataChange
或更改代码的逻辑。
希望它有所帮助。