java.lang.IllegalStateException: FirebaseApp with name [DEFAULT]

前端 未结 3 1605
抹茶落季
抹茶落季 2020-12-10 11:24

I have been getting this issue.. followed the upgrade guide for new firebase sdk...saved the google services json file in app directory.. still the same error as you but for

相关标签:
3条回答
  • 2020-12-10 11:58

    Extending @Ian Barber's solution, you can try this generic check to skip processing your custom Application.onCreate for all non-main processes. If the additional processes don't belong to you, then you don't want any of your custom to run.

    @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
    }
    
    0 讨论(0)
  • 2020-12-10 12:01

    I solved this error by don't put anything of Firebase in Application. I put it in to MainActivity. Example: MainActivity.java

    @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        ...
    }
    

    -UPDATE

    Other solution is create a DatabaseHelper class contain one FirebaseDatabase instance.

    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;
      }
    }
    

    and using by: FirebaseDatabase database = DatabaseHelper.getInstance();

    0 讨论(0)
  • 2020-12-10 12:03

    Are you using Firebase Crash Reporting? You might be hitting this error because of that if its hitting a background process and not the main.

    Crash Reporting creates a second process (background_crash) to send crashes. Unfortunately, all processes in an Android app share a common Application subclass, so your onCreate method is run in the background process as well. That tries to initialise database, which fails.

    The fix is to make sure the Database call is only run when Firebase is properly configured (which will be in the main process). You can check like this:

    @Override
    public void onCreate() {
      super.onCreate();
      if (!FirebaseApp.getApps(this).isEmpty()) {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
      }
    }
    
    0 讨论(0)
提交回复
热议问题