我一直在遇到这个问题..按照新firebase sdk的升级指南...在app目录中保存了google服务json文件..仍然和你一样错误,但数据库...
Caused by: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.
答案 0 :(得分:32)
您使用的是Firebase崩溃报告吗?您可能会遇到此错误,因为如果它遇到后台进程而不是主进程。
崩溃报告会创建第二个进程(background_crash
)来发送崩溃。不幸的是,Android应用中的所有流程都共享一个公共Application
子类,因此您的onCreate
方法也会在后台进程中运行。这会尝试初始化数据库,但失败了。
修复方法是确保仅在正确配置Firebase时运行数据库调用(这将在主进程中)。您可以这样检查:
@Override
public void onCreate() {
super.onCreate();
if (!FirebaseApp.getApps(this).isEmpty()) {
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
答案 1 :(得分:4)
我通过不在应用程序中放置任何Firebase来解决此错误。我把它放在MainActivity中。例: MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
...
}
-UPDATE
其他解决方案是创建一个DatabaseHelper类,其中包含一个FirebaseDatabase实例。
public class DatabaseHelper {
private static boolean persistenceEnable = false;
private static FirebaseDatabase mDatabase;
public static boolean isPersistenceEnable(){
return persistenceEnable;
}
public static FirebaseDatabase getInstance() {
if (mDatabase == null) {
mDatabase = FirebaseDatabase.getInstance();
if(persistenceEnable==true) {
mDatabase.setPersistenceEnabled(true);
}
}
return mDatabase;
}
}
并使用:FirebaseDatabase database = DatabaseHelper.getInstance();
答案 2 :(得分:0)
扩展@Ian Barber的解决方案,您可以尝试此通用检查以跳过处理所有非主要进程的自定义Application.onCreate。如果其他流程不属于您,则您不希望自定义任何自定义。
@Override
public void onCreate() {
super.onCreate();
if (FirebaseApp.getApps(this).isEmpty()) {
// No firebase apps; we are in a non-main process
// skip custom Application.onCreate
return;
}
// Firebase init only in the main process
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
// other code
}