Android:通过我的应用程序使用一个 Firebase ChildEventListener

Posted

技术标签:

【中文标题】Android:通过我的应用程序使用一个 Firebase ChildEventListener【英文标题】:Android: using one Firebase ChildEventListener through my app 【发布时间】:2017-08-04 13:22:16 【问题描述】:

我正在寻找一种方法来使用ChildEventListener 在每次活动中收听我的数据库中的特定位置。

我有一个购物应用,我需要通过该应用监听用户的订单状态,以显示警报并在本地保存数据。

我有两个想法:

    我想过在OnResume()中附加和分离监听器 和每个ActivityOnPause(),但代码将在 每个Activity,因为它做同样的工作。 我考虑将一个监听器附加到MainActivity,然后发送 广播到其他活动,但由于 MainActivity 被销毁而失败

--

监听一个节点并保持应用同步的最佳做法是什么?

【问题讨论】:

【参考方案1】:

使用多个侦听器时,Firebase 没有问题,即使它是同一个侦听器。只要您根据 Activity 的生命周期移除监听器,Firebase 就会几乎完美地处理监听器。

你的班级应该是这样的:

public class HelperClass extends Application 
    private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

    public static verifyStatus() 
        databaseReference.addChildEventListener() /* ... */
    

您需要根据活动的生命周期删除监听器。如果您在onStart 中添加了侦听器,则必须在onStop 中删除它。如果您在onResume 中添加了侦听器,则必须在onPause 中删除它。如果您在onCreate 中添加了侦听器,则必须在onDestroy 中删除它。但请记住 onDestroy 并不总是被调用。

希望对你有帮助。

【讨论】:

你说得对,但我的目标是集中工作,所以以后修改代码很容易。 在这种情况下,您可以创建一个HelperClass,您可以在其中创建一个可以在您需要的每个活动中重复使用的方法。 这很简单...听起来是个好主意,但如果我在每个活动中创建侦听器不会有延迟吗? 现在会有延迟,因为每个监听器都会被分开处理。请记住,Firebase 它是一个实时数据库。 谢谢,这就是我需要听到的,关于生命周期的任何建议? onPause()onResume() 会完美地完成这项工作吗?【参考方案2】:

尝试以这种方式创建一个 class,然后在 class 内部创建您想要的 method

public class firebaseutils 

public static void check()

    


然后在你想要的地方调用这个,像这样:

firebaseutils.check();

【讨论】:

【参考方案3】:

最近我解决了同样的问题。因此,创建一个 ChildEventListener 的处理程序类,它有一个实例,如 FirebaseDatabase、FirebaseAuth 和其他 Firebase 服务。那个类和这个sn-p是一样的:

public class ShopHandler implements ChildEventListener 

    private static ShopHandler current = null;
    private DatabaseReference databaseReference;

    private ShopHandler() 

    public synchronized static void attach() 
        if (current = null) 
            current = new ShopHandler();
            databaseReference = FirebaseDatabase.getInstance().getReference("data/yournode");
            databaseReference.addChildEventListener(this);
        
    

    public syncrhonized static void detach() 
         // remove listeners and set current as null
    
    // implements all methods about ChildEventListener


【讨论】:

以上是关于Android:通过我的应用程序使用一个 Firebase ChildEventListener的主要内容,如果未能解决你的问题,请参考以下文章

休眠后,Android应用程序在kindle fire上关闭

检测应用程序正在 Kindle Fire 上运行

如何区分 Android 应用程序是不是在 Amazon Kindle Fire 上运行?

Fire-base 卡住并且无法与 android studio 连接

Android 应用在 Amazon Fire TV 中无响应

如何在 Android 中放置正确的应用程序图标大小,包括 Amazon Kindle Fire?