Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase数据库中启用持久性的IllegalStateException_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebase数据库中启用持久性的IllegalStateException

Android Firebase数据库中启用持久性的IllegalStateException,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,在从Android Vitals收集了新的失败和ANR部分之后,我在enable persistence上发现了几个关于firebase数据库的非法状态异常 例外情况: java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) at android.app.ActivityThread.handleLaunchActivity(Act

在从Android Vitals收集了新的失败和ANR部分之后,我在enable persistence上发现了几个关于firebase数据库的非法状态异常

例外情况:

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
  at android.app.ActivityThread.access$900(ActivityThread.java:157)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5530)
  at java.lang.reflect.Method.invoke(Method.java:0)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:733)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
Caused by: java.lang.IllegalStateException: 
  at com.google.firebase.FirebaseApp.getInstance(FirebaseApp.java:0)
  at com.google.firebase.database.FirebaseDatabase.getInstance(FirebaseDatabase.java:0)
  at <OR>.getInstance(FirebaseDatabase.java:0)
  at <OR>.setPersistenceEnabled(FirebaseDatabase.java:0)
  at <OR>.zziE(FirebaseDatabase.java:0)
  at myapp.MyActivity.<init>(MyActivity.java:0)
  at java.lang.Class.newInstance(Class.java:0)
  at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329)
更新日期:2018年3月2日

根据@Frank van Puffelen的建议,我创建了这个,但问题仍然存在

今天上午9:14,应用程序版本27 LGE LG K8 mm1v、1536MB内存、安卓6.0 报告1


要解决此问题,请使用以下代码:

private static boolean calledAlready = false;
if (!calledAlready) {
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
    calledAlready = true;
}
您需要将此代码用作onCreate方法的第一个代码。在这种情况下,setPersistenceEnabled方法只有在之前没有调用时才会被调用,因为存在CalledReady boolean

希望能有帮助

public class FirebaseContentProvider extends ContentProvider {

    private static FirebaseDatabase mDatabase;

    @Override
    public boolean onCreate() {

        if (mDatabase == null) {
            mDatabase = FirebaseDatabase.getInstance();
            mDatabase.setPersistenceEnabled(true);
        }

        return true;
    }
}
AndroidManifest.xml

<application
 ... >
    <provider
         android:name=".test.FirebaseContentProvider"
         android:authorities="com.test.FirebaseContentProvider"
         android:exported="false" />
</application>

请参阅搜索代码以查找对setPersistenceEnable的其他调用。如果崩溃是Configuration.onCreate中调用的结果,我希望在堆栈跟踪中看到与应用程序创建相关的行,例如android.app.Instrumentation.callapplicationncreate。相反,有几行代码表明系统正在尝试创建MyActivity的实例。@ρцσѕρєK-我已经从应用程序类中删除了代码,并使用了建议的代码来解决问题,但它没有解决问题,它仍然会生成错误日志。@Bob Snyder-正如Frank van Puffelen所引用的,错误是由于我的应用程序是多进程的。问题很可能是由多进程应用程序引起的,该应用程序是@ρцσѕρєK链接的。在这种情况下,这段代码没有帮助,因为静态布尔值链接到单个流程实例。除了在主活动中简单地调用setPersistenceEnabledtrue(这意味着它会被多次调用)之外,内容提供者是唯一合适的解决方案,但这并不重要。
public class FirebaseContentProvider extends ContentProvider {

    private static FirebaseDatabase mDatabase;

    @Override
    public boolean onCreate() {

        if (mDatabase == null) {
            mDatabase = FirebaseDatabase.getInstance();
            mDatabase.setPersistenceEnabled(true);
        }

        return true;
    }
}
<application
 ... >
    <provider
         android:name=".test.FirebaseContentProvider"
         android:authorities="com.test.FirebaseContentProvider"
         android:exported="false" />
</application>