【问题标题】:Android Studio Notification: How to run notification ONLY when the data is changed on the Firebase DatabaseAndroid Studio 通知:如何仅在 Firebase 数据库上更改数据时运行通知
【发布时间】:2017-12-03 05:02:50
【问题描述】:

在我的 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() 在数据更新时运行,但问题是每当我进入此屏幕并返回屏幕时它就会运行。

如何让它在我刷新屏幕时不运行? (使其仅在数据更改时运行)。

【问题讨论】:

  • 您可以将此代码添加到您打开应用程序后第一次打开的主要活动中,然后使用 setter 方法将此 Firebase 数据发送到您想要的任何类。
  • 但是当应用程序第一次启动时它不会仍然运行,这是我不想要的吗?
  • 是的,它会在应用程序打开时......你可以阅读childEventListener

标签: android firebase


【解决方案1】:

尝试将您的代码移动到 onCreate() 中的某个位置。

【讨论】:

    【解决方案2】:

    您可以将功能包装为 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() 订阅它并显示您的通知。

    【讨论】:

    • 这只会跳过第一轮吗?
    • 是的,所以基本上每次运行 OP 中的代码、屏幕刷新等时,它都会运行一次,然后等待数据更改。此代码将跳过它刚开始运行的时间。
    猜你喜欢
    • 2014-04-10
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多