2017-12-03 78 views
1

在我的Android應用程序中,我使用Firebase實時數據庫更新數據更改並顯示在屏幕上。Android Studio通知:如何僅在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

您可以將此代碼添加到打開應用程序後首次打開的主活動中,然後使用setter方法將此Firebase數據發送到您想要的任何類。 – Shruti

+0

但是,當應用第一次啓動時它不會運行,這是我不想要的嗎? – Dawn17

+0

是的,它會在應用程序打開..你可以閱讀'childEventListener' – Shruti

回答

0

嘗試將代碼移動到onCreate()的某處。

0

您可以將功能封裝爲RxJava Observable,然後使用skip運算符對其進行過濾以跳過第一個事件。

關閉我的頭頂:

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中的代碼運行時,當屏幕刷新等等時,它將運行一次然後等待數據改變。這段代碼會跳過剛開始運行的時間。 –

相關問題