2017-12-03 58 views
1

私のAndroidアプリケーションでは、Firebaseリアルタイムデータベースを使用してデータの変更を更新し、画面に表示します。Androidスタジオ通知:Firebaseデータベースでデータが変更された場合にのみ通知を実行する方法

@Override 
    public void onStart() { 
     super.onStart(); 

     userReference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot userData) { 

       userStarredMatchList.clear(); 

       for(DataSnapshot userDataSnapshot : userData.getChildren()) { 


       notificationFunction(); 

       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { /* BLANK */} 

     }); 

    } 

私はこのようにして、データが参照上で更新されるたびに実行されます。 notificationFunction()は、データが更新されたときに実行されますが、この画面にアクセスして画面に戻るたびに問題が発生します。

画面を更新するたびに実行しないようにするにはどうすればよいですか? (データが変更されたときにのみ実行させる)。

+0

このコードをあなたの主なアクティビティに追加することができます。このアクティビティは、アプリケーションを開いた後に開いてから1日後、このFirebaseデータをセッターメソッドを使用して必要なクラスに送信します。 – Shruti

+0

しかし、アプリが最初に起動したときにはまだ実行されませんが、これは私が望まないものですか? – Dawn17

+0

ええ、それはアプリで開きます..あなたは 'childEventListener'について読むことができます – Shruti

答えて

0

あなたのコードをonCreate()のどこかに移動してみてください。

0

RxJava Observableとして機能をラップし、最初のイベントをスキップするためにスキップ演算子を使用してフィルタリングすることができます。私の頭の上オフ

Observable<DataSnapshot> o = Observable.create(emitter -> { 

    userReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot userData) { 

      userStarredMatchList.clear(); 

      for(DataSnapshot userDataSnapshot : userData.getChildren()) { 


       emitter.onNext(userDataSnapshot); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { /* BLANK */} 

    }); 


}).skip(1); 

その後、onStart()でそれを購読すると、あなたの通知を表示することができます。

+0

これは最初のラウンドをスキップするだけですか? – Dawn17

+0

OPのコードが実行されるたびに、画面がリフレッシュされるなど、データが変更されるのを待ってから実行されます。このコードは、最初に実行されたときの時刻をスキップします。 –

関連する問題