2017-05-06 93 views
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() { 

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

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

谢谢

萨蒂亚

回答

0

发生这种情况,因为你是循环两次。一旦登录dataSnapshot,然后登录offlineOrders ArrayList。因此,为了解决这个问题,请从onDataChange方法中取出for loop或更改代码的逻辑。

希望它有帮助。

+0

谢谢......我想我明白你在说什么。我想,我将不得不在我的offlineOrders if子句中修改代码。 – Satya