2017-05-06 72 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