2017-05-06 10 views
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回表示しています。

私のコードで何が間違っているのか理解できる人はいますか?

は、あなたが二回ループしているので、これが起こっているあなた

サティヤ

答えて

0

ありがとうございました。一度はdataSnapshotに、offlineOrdersには2番目にArrayList。したがって、この問題を解決するには、onDataChangeメソッドからfor loopを取り除くか、コードのロジックを変更してください。

希望します。

+0

ありがとうございます...私はあなたが言っていることを理解していると思います。私は、私のofflineOrders if節の中でコードを修正しなければならないと思う。 – Satya

関連する問題