2016-08-28 4 views
0

数週間前にAndroid用のFirebaseを学習し始めましたが、今は非常に基本的なチャットアプリケーションを作成しています。Firebase OnChildAdded()イベントがスクロールビューで倍精度を生成しています

ホームボタンを押してからアプリに戻ったときに問題が発生します。私はそれがOnChildAdded()イベントを再び呼び出すと思うので、それはダブルスを生成します。私はこれを解決する方法を知らない。もし誰かが私を助けてくれたら、感謝しています。

Screenshot

Screenshot

答えて

0

:ここ

public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      //messageText.append(username + ": " + messageReceived + " \n"); 
      Iterator iterator = dataSnapshot.getChildren().iterator(); 
      String newmsg = null, theusername = null; 
      while (iterator.hasNext()){ 
       newmsg = (String) ((DataSnapshot) iterator.next()).getValue(); 
       theusername = (String) ((DataSnapshot) iterator.next()).getValue(); 

      } 
      messageText.append(theusername + ": " + newmsg + " \n"); 
      scrollView.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
       } 
      },200); 
     } 

は、エミュレータの絵と私firebaseコンソールの構造である:

この

は、私は問題を抱えています一部であります onChildAdded()が同じ子に対して複数回呼び出されている場合、 は非常にに複数のリスナーが接続されている可能性があります。あなたのアクティビティがアクティブにならない場合は detach the listenerにする必要があります。

// if you attach like this 
var listener = ref.addChildEventListener(childEventListener); 

// later detach the listener with 
ref.removeEventListener(listener); 

リスナーを取り外す最適な場所は、どこにアタッチしたかによって異なります。通常はペアのことを考えるのが一番です。onCreate() - >onDestroy()onStart() - >onStop()onResume() - >onPause()

+0

私はonStart()メソッドでのみこれらのonChildEventsを持っていますが、あなたのメソッドを試してみましょう –

+0

申し訳ありませんが、私はあなたがそれを詳細に教えていただけますことを理解できません?コード賢明?ありがとうございました。 –

+0

誰も助けてあげないでしょうか? :( –