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

时间:2017-08-04 13:22:17

标签: android firebase firebase-realtime-database

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

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

我有两个想法:

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

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

3 个答案:

答案 0 :(得分:0)

使用多个侦听器时Firebase没有问题,即使它是同一个侦听器。只要您根据活动的生命周期删除监听器,Firebase几乎可以完美地处理听众。

你的课应该是这样的:

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

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

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

希望它有所帮助。

答案 1 :(得分:0)

尝试这种方式创建并在内创建您想要的方法

public class firebaseutils {

public static void check(){

    }

}

将此称为您想要的地方,例如:

firebaseutils.check();

答案 2 :(得分:0)

最近我解决了同样的问题。因此,创建一个ChildEventListener的处理程序类,它有一个像FirebaseDatabase,FirebaseAuth和其他Firebase服务的实例。该类与此片段相同:

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

}