我正在寻找一种方法,使用一个ChildEventListener
在每个活动中收听数据库中的特定位置。
我有一个购物应用程序,我需要通过应用程序收听用户的订单状态,以显示警报并在本地保存数据。
我有两个想法:
OnResume()
中添加和分离听众
每个OnPause()
的{{1}},但代码将被复制
每个Activity
,因为它做同样的工作。Activity
,然后发送
广播到其他活动,但由于MainActivity
被销毁而失败-
收听一个节点并保持应用同步的最佳做法是什么?
答案 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
}