addListenerForSingleValueEvent为每条记录执行两次

时间:2017-05-06 00:22:31

标签: android firebase firebase-realtime-database

我有以下代码,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() {

将为每条记录执行一次。但是每个记录都要执行两次。结果我的订单列表有重复,因此我的适配器显示每个记录两次。

任何人都可以帮我理解我的代码有什么问题吗?

谢谢

萨蒂亚

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您正在循环两次。一旦在dataSnapshotofflineOrders ArrayList上的第二个。因此,为了解决此问题,请从for loop方法中取出onDataChange或更改代码的逻辑。

希望它有所帮助。