0
以下のコードがあり、firebaseには2レコードあります。addListenerForSingleValueEventはレコードごとに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() {
は、レコードごとに一回実行されますと思いました。しかし、レコードごとに2回実行されています。その結果、私のオーダーリストに重複があり、そのため私のアダプターは各レコードを2回表示しています。
私のコードで何が間違っているのか理解できる人はいますか?
は、あなたが二回ループしているので、これが起こっているあなたサティヤ
ありがとうございます...私はあなたが言っていることを理解していると思います。私は、私のofflineOrders if節の中でコードを修正しなければならないと思う。 – Satya