2017-12-04 5 views
0

Firebase Realtime Databaseを使用してAndroidアプリケーションを開発しています。addValueEventListenerは、スリープモードからアプリに戻っても実行されます

特定の参照のために私のaddValueEventListenerは、データベースにデータ変更があるたびに実行されます。また、アプリが起動するたびに実行されます。これらは私にとって理にかなっていますが、これは別のアクティビティからアプリに戻るときにも実行されます。たとえば、私は自分の携帯電話のホーム画面に移動し、このアプリに戻るときに実行され、が実行されます。

私のアプリでデータが変更されたときはいつでもvibrationを実装しているので、これは問題です。私はアプリに初めてアクセスするときにvibrationを防ぐために、グローバルなint変数を設定しました。

それはのように動作します:私はこのアプリを再実行するたびに、それが0にリセットされますように、私は、この関数のint notificationCounter = 0外を初期化

matchReference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       if(notificationCounter > 0) notifyGoals(getView()); 

       clearCurrentList(); 
       notificationCounter++; 

       // Fires every single time the channelReference updates in the 
       } 

       adapter.notifyDataSetChanged(); 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

。しかし、電話(ホーム画面またはロック画面)で別のアクティビティを実行してこの画面に戻ると、int notificationCounter = 0の初期化の前にaddValueEventListenerが実行されます。どうすればこの問題を解決できますか?

+0

関数を作成し、addValueEventListenerおよびその関数で呼び出します。notificationCounter = 0 –

+0

ここで、matchReference.addValueEventListenerを呼び出しますか?それはonResumeです –

+0

@RissmonSuresh言及してくれないのは残念です。それはonStartにあります – Dawn17

答えて

0

これは、onDataChange()メソッドが非同期と呼ばれ、このメソッドがデータベースからデータを取得するのを待たずに呼び出されるためです。これを解決するには、2つの方法があります。あなたのnotificationCounter intの宣言をonDataChange()メソッド内に移動するか、または非同期ワードに飛び込み、postからの私の答えを使用します。

関連する問題