Android 当从BroadcastReceiver调用setPersistenceEnabled(true)时,应用程序崩溃
我正在使用此解决方案:Android 当从BroadcastReceiver调用setPersistenceEnabled(true)时,应用程序崩溃,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在使用此解决方案: public class FirebaseUtil { private static FirebaseDatabase mDatabase; public static FirebaseDatabase getDatabase() { if (mDatabase == null) { mDatabase = FirebaseDatabase.getInstance(); mDatabase.
public class FirebaseUtil {
private static FirebaseDatabase mDatabase;
public static FirebaseDatabase getDatabase() {
if (mDatabase == null) {
mDatabase = FirebaseDatabase.getInstance();
mDatabase.setPersistenceEnabled(true);
}
return mDatabase;
}
}
我的申请类别:
public class AnalyticsApplication extends Application {
private static GoogleAnalytics sAnalytics;
private static Tracker sTracker;
@Override public void onCreate() {
super.onCreate();
sAnalytics = GoogleAnalytics.getInstance(this);
}
synchronized public Tracker getDefaultTracker() {
if (sTracker == null) {
sTracker = sAnalytics.newTracker(R.xml.global_tracker);
}
return sTracker;
}
}
我有对数据库进行更改的通知。从广播接收器调用通知
问题是,当从应用程序调用getDatabase()时,它工作正常,但当从通知(不同线程)调用它时,它崩溃。当我注释mDatabase.setPersistenceEnabled(true)时代码>工作正常
为什么会发生这种情况?我可以修复它吗
更新:
例外情况如下:
java.lang.RuntimeException:
at android.app.ActivityThread.handleReceiver (ActivityThread.java:3047)
at android.app.ActivityThread.-wrap18 (ActivityThread.java)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1561)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6119)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
Caused by: java.lang.NullPointerException:
at com.mycarservice.mycarservice.utils.DocumentDatabaseHandlerRemote.updateDocument (DocumentDatabaseHandlerRemote.java:48)
at com.mycarservice.mycarservice.utils.NotificationUtils.sendNotification (NotificationUtils.java:43)
at com.mycarservice.mycarservice.utils.DocumentReceiver.onReceive (DocumentReceiver.java:35)
at android.app.ActivityThread.handleReceiver (ActivityThread.java:3040)
我的想法是在收到通知时更新文档-在DocumentReceiver.onReceive
(BroadcastReceiver)中,我调用sendNotification()
,它调用updateDocument()
mDatabase.setPersistenceEnabled(true)
由于必须在应用程序级别初始化firebase而导致崩溃
public class MApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
在manifest.xml中:
<application
android:name=".MApplication"/>
希望它能帮助你 共享您的应用程序类。public class analytics应用程序扩展应用程序{private static GoogleAnalytics sAnalytics;private static Tracker;@Override public void onCreate(){super.onCreate();sAnalytics=GoogleAnalytics.getInstance(this);}同步公共跟踪器getDefaultTracker(){if(sTracker==null){sTracker=sAnalytics.newTracker(R.xml.global_Tracker);}返回sTracker;}}
i发布解决方案。检查并让我知道它是否工作。请更新您的问题,以包括您得到的错误的完整堆栈跟踪。我包括堆栈跟踪。希望对你有帮助。请注意,当我不使用setPersistenceEnabled(true)
时,它不会崩溃。我已经尝试过了,但应用程序在生产时经常崩溃。在本地,我无法重现错误,但google play控制台有许多崩溃报告。我现在尝试调用FirebaseDatabase.getDatabase()代码>在我的应用程序中onCreate()
但它甚至在我收到通知之前就崩溃了。