首页 > 解决方案 > 仅在数据更新时调用的 Firebase 事件监听器

问题描述

每当 Firebase 中的数据发生变化时,我都想发送通知。但是当我使用addValueEvenListener()方法时,它不止一次返回。之后我尝试使用addListenerForSingleValueEvent()方法,但它现在返回 2 次,当我启动应用程序和数据更改时。有没有办法让它只返回一次,即数据更改时而不是应用程序启动时?

这是我现在的代码:

databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                sendNotification("notification","App name",getIntent().getStringExtra("storeid"));
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

编辑:让每个人都理解我的问题。当我启动应用程序时,由于上面的代码,会发送通知。而且我不希望这种情况发生,相反,我只需要在数据更改时发送通知。

标签: androidfirebasefirebase-realtime-database

解决方案


根据Docs, ValueEventListener 不仅在数据更改时返回值,而且在方法首次执行时返回。

据我所知,您的问题有两种可能的解决方案:

  1. 您使用后台服务是为了使该方法在后台运行,以便每次打开应用程序时它都不会返回值。这也意味着,您甚至会在应用程序未打开时收到通知。我不知道这是否符合你的利益。

  2. 存储该值并每次手动检查。您可以将返回的值保存到存储中,并在每次侦听器执行时检查新值是否与先前的值不同。

我希望我能帮上忙,快乐的编码


推荐阅读