2017-08-04 77 views
-1

我正在寻找一种方法来在每个活动中使用一个ChildEventListener来收听我数据库中的特定位置。Android:通过我的应用程序使用一个Firebase ChildEventListener

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

我有2个想法在脑海:

  1. 我想到了安装和拆卸的OnResume()
    ActivityOnPause()听众,但代码将在 每Activity因为被复制它做同样的工作。
  2. 我想到了一个监听器连接到MainActivity,然后发送 广播给其他活动,但这种失败,原因是MainActivity被破坏

-

什么是听一个最佳实践节点并保持应用程序同步?

回答

0

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

你的类应该是这样的:

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

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

您需要相应地删除监听到你的活动的生命周期。如果您在onStart中添加了听众,则必须在onStop中将其删除。如果您在onResume中添加了听众,则必须在中将其删除。如果您已在onCreate中添加了听众,则必须将其删除至onDestroy。但请记住,并不总是调用onDestroy。

希望它有帮助。

+0

你说得对,但我打算集中工作,所以稍后修改代码很容易。 – Khaled

+2

在这种情况下,您可以创建一个'HelperClass',在其中创建一个可以在您需要的每个活动中重用的方法。 –

+0

那很简单...听起来像一个想法,但如果我在每个活动中创建监听器,不会有延迟吗? – Khaled

0

尝试这种方式创建一个和内部创建方法要这样:

public class firebaseutils { 

public static void check(){ 

    } 

} 

并称之为,你想要的,这样的:

firebaseutils.check(); 
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 

} 
相关问题