Android Studio通知:如何仅在Firebase数据库中的数据更改时运行通知

问题描述:

在我的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

尝试将代码移动到onCreate()的某处。

您可以将功能封装为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中的代码运行时,当屏幕刷新等等时,它将运行一次然后等待数据改变。这段代码会跳过刚开始运行的时间。 –