【问题标题】:Make sure to call FirebaseApp.initializeApp(Context) first in Android确保首先在 Android 中调用 FirebaseApp.initializeApp(Context)
【发布时间】:2018-02-09 04:43:48
【问题描述】:

我正面临这个问题,并在这个网站上看到了一些答案,但没有得到任何适当的解决方案。
我使用了以前版本的Firebase,它工作正常,但是当我尝试使用Upgradation 升级并将Firebase 类更新为DatabaseReference 时,它显示错误并且无法正常工作。
我正在添加清单文件的整个代码,因此请帮助我解决此问题。
这是我的manifest

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="firebasechat.com.firebasechat">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:name=".Activity.SimpleBlog"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Activity.RegisterActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

我的Module app 如下所示。

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "firebasechat.com.firebasechat"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        multiDexEnabled  true

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
}



dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.volley:volley:1.0.0'
compile "com.google.firebase:firebase-database:11.0.0"
compile 'com.google.android.gms:play-services:11.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
testCompile 'junit:junit:4.12'
    testCompile 'junit:junit:4.12'
}

Project gradle

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:4.2.0'// Updated version of google service
    }
}
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com" // Google's Maven repository
        }
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

下面是我的Activity

    public class RegisterActivity extends AppCompatActivity {

    EditText username, password;
    Button registerButton;
    String user, pass;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        username = (EditText)findViewById(R.id.username);
        password = (EditText)findViewById(R.id.password);
        registerButton = (Button)findViewById(R.id.registerButton);


          FirebaseApp.initializeApp(this);



        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                user = username.getText().toString();
                pass = password.getText().toString();


                    final ProgressDialog pd = new ProgressDialog(RegisterActivity.this);
                    pd.setMessage("Loading...");
                    pd.show();

                    String url = "https://pure-coda-174710.firebaseio.com/users.json";

                    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
                        @Override
                        public void onResponse(String s) {

//                            Firebase reference = new Firebase("https://pure-coda-174710.firebaseio.com/users");
                            DatabaseReference reference = FirebaseDatabase.getInstance()
                                    .getReferenceFromUrl("https://pure-coda-174710.firebaseio.com/users");


                            if(s.equals("null")) {
                                reference.child(user).child("password").setValue(pass);
                                Toast.makeText(RegisterActivity.this, "registration successful", Toast.LENGTH_LONG).show();
                            }
                            else {
                                try {
                                    JSONObject obj = new JSONObject(s);

                                    if (!obj.has(user)) {
                                        reference.child(user).child("password").setValue(pass);
                                        Toast.makeText(RegisterActivity.this, "registration successful", Toast.LENGTH_LONG).show();
                                    } else {
                                        Toast.makeText(RegisterActivity.this, "username already exists", Toast.LENGTH_LONG).show();
                                    }

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                            pd.dismiss();
                        }

                    },new Response.ErrorListener(){
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {
                            System.out.println("" + volleyError );
                            pd.dismiss();
                        }
                    });

                    RequestQueue rQueue = Volley.newRequestQueue(RegisterActivity.this);
                    rQueue.add(request);

            }
        });
    }
}

【问题讨论】:

  • 错误是什么?
  • @Burhanuddin Rashid 此错误发生在运行时,如 java.lang.IllegalStateException:默认 FirebaseApp 在此过程中未初始化 firebasechat.com.firebasechat。确保首先调用 FirebaseApp.initializeApp(Context)。
  • 请显示您的清单、模块级 build.gradle 和项目级 build.gradle 文件代码。您是否还在项目中添加了 google-services.json 文件?
  • @R.R.M 我已经通过添加gradle file 更新了我的问题,所以请检查并告诉我。
  • 你没有在模块级 gradle fille 的底部添加这一行:apply plugin: 'com.google.gms.google-services' 吗?

标签: android firebase


【解决方案1】:

在您的 SimpleBlog 应用程序类中,在 onCreate() 方法中初始化 FirebaseApp 并将其从 RegisterActivity 中删除,以便将 Firebase 初始化为整个应用程序,而不仅仅是一个 Activity。

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
}

同时在 app gradle 末尾添加apply plugin: 'com.google.gms.google-services'

dependencies {
    ....
}

apply plugin: 'com.google.gms.google-services'

需要插件来处理来自 firebase 的 json 配置并避免依赖冲突。你可以阅读here了解更多详情。

【讨论】:

  • 你在gradle文件中添加配置了吗?
  • @SakibSyed 尝试使用classpath 'com.google.gms:google-services:3.0.0',而不是classpath 'com.google.gms:google-services:3.1.0'
  • 这不应该是公认的答案,因为默认行为(根据我正在阅读的内容)是不需要“手动”初始化 Firebase 应用程序。这个我自己试过了,发现不行。
  • 对我不起作用,如下所述在您的项目 gradle 中,使用 Google 服务:4.0.0 而不是 4.1.0
  • 非常感谢!现在我的工作又顺利了!
【解决方案2】:

确实花了一整天。最后,这就是解决方案。

使用 0 而不是 1,您将不必使用初始化 firebaseapp 或类似的东西。

在 Project gradle 中,使用 Google 服务:4.0.0 而不是 4.1.0。

另外,根据我的经验,最后应用插件语句也不是必需的。

(希望您已经从工具中添加了 firebase 数据库 => firebase 助手。步骤 1 和步骤 2 正确且绿色。)

【讨论】:

  • 感谢 user3156040,“在 Project gradle 中,使用 Google 服务:4.0.0 而不是 4.1.0”此更改对我有用。
  • 非常感谢,这个解决方案仍然有效。 Android studio 默认生成 4.1.0 :( 虽然有一个新版本 4.2.0(它可以工作)
  • 使用 Firebase 4 年后,它突然说 call FirebaseApp.initializeApp(Context) .... 我刚刚将 Project gradle 从 Google services: 4.1.0 更改为 >>> 4.2.0 .... 和eveyting 工作得很好!
  • 插件:com.google.gms.google-services 是必须的!!不要诱导人做空事!!如果您不使用对话消息调用 Firebase.initializeApp(context),Firebase 服务会通知您。从这里阅读文档:developers.google.com/android/guides/google-services-plugin
  • 你能解释一下“用 0 代替 1”是什么意思吗?您是否在 build.gradle 中将某个值设置为 0?
【解决方案3】:

根据FirebaseApp 文档,您不需要调用此初始化,除非您的应用需要访问另一个 Firebase 项目。

我调用了这个初始化,有时,当用户打开我的应用程序时,用户有时会崩溃,所以我删除了这行代码,然后一切正常。 小心调用此初始化

FirebaseApp 文档截图:

更新:如果您尝试添加此行,则会出现以下异常[某些广告网络需要此行,他们还在其AndroidManifest中添加了一些进程]

未能获得 Firestore 客户端脱机持久性的独占锁定。这通常意味着您在应用中的多个进程中使用 Firestore。请记住,多进程 Android 应用程序会在所有进程中执行 Application 类中的代码,因此您可能需要避免在 Application 类中初始化 Firestore。如果您有意从多个进程中使用 Firestore,则只能在其中一个进程中启用离线持久性(即调用 setPersistenceEnabled(true))。

修复它:

1) 在Application 类中添加以下方法:

private boolean isMainProcess(Context context) {
    if (null == context) {
        return true;
    }
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    int pid = android.os.Process.myPid();
    for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
        if (APPLICATION_ID.equals(processInfo.processName) && pid == processInfo.pid) {
            return true;
        }
    }
    return false;
}

2) 将onCreate 包裹在您的Application

@Override
public void onCreate() {
    super.onCreate();
    if (!isMainProcess(this)) {
        FirebaseApp.initializeApp(this);
        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        FirebaseFirestore.getInstance().setFirestoreSettings(settings);
        // other things
        return;
    }
    // other things
}

更新:有时,我的应用会抛出异常

无法创建应用程序我的应用程序类:java.lang.IllegalStateException:默认 FirebaseApp 未在此进程 MY_APPLICATION_ID 中初始化。确保首先调用 FirebaseApp.initializeApp(Context)。

修复它:让更新onCreate方法:

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
    boolean isMain = isMainProcess(this);
    FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder().setPersistenceEnabled(isMain).build();
    FirebaseFirestore.getInstance().setFirestoreSettings(settings);
    if (!isMain) {
        // other things
        return;
    }
    // other things
}

【讨论】:

  • 这很好,但 StringUtils 的使用可能会被 name.equals("") 取代。另外,在使用 manager 之前应该先对它进行空检查!
【解决方案4】:

遇到同样的问题并通过这种方式解决:

活动中:

@Override
public void onCreate() {
    super.onCreate();
    FirebaseApp.initializeApp(this);
}

在应用程序的 gradle 中(文件末尾):

dependencies {
    ....
}

apply plugin: 'com.google.gms.google-services'

是项目的gradle:

   dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.0.0'
}

【讨论】:

  • 对我来说,apply plugin: 'com.google.gms.google-services' 被添加到apply plugin: 'com.android.application' 的右上角。
  • 必须使用com.google.gms:google-services:4.0.1 版本作为类路径,其他一些版本出错,所以如果这不适合你,请继续尝试不同的版本
  • 天啊,请不要这样做,firebase 文档字面上说不能显式调用它(除非您的应用程序中有多个 FS 实例),因为库会自动初始化它!跨度>
【解决方案5】:
  1. 前段时间我也遇到过同样的问题。

    您正在尝试获取 Firebase 实例而不对其进行初始化。 请在尝试获取实例之前添加这行代码 火力基地:

    只需导入最新版本的 firebase 和 google play 服务。

    最近更新版本(示例):

添加到这些行 build.gradle

dependencies {

    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation 'com.firebase:firebase-jobdispatcher:0.8.5'


}
apply plugin: 'com.google.gms.google-services'



dependencies {
    classpath 'com.android.tools.build:gradle:3.3.1'
    classpath 'com.google.gms:google-services:4.2.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

仅此而已。享受您的编码。

【讨论】:

  • 这确实有效。我使用的是 4.1.0,更改为 4.2.0 就可以停止获取此信息:“java.lang.IllegalStateException:默认 FirebaseApp 在此过程 com.allinlearning.assist_android 中未初始化。确保调用 FirebaseApp.initializeApp(上下文)优先。”
【解决方案6】:

首先要做的是:项目配置 JSON 可能会出错/过时,主要是在升级 Firebase 时。

转到工具->Firebase->云消息传递->设置 Firebase 云消息传递

即使您过去曾这样做过,也值得仔细检查here,因为事情会不时更新。我同步了我的项目,它解决了这个问题。

至于打电话给FirebaseApp.initializeApp,没必要,至少FCM没必要。请参阅FCM documentations

此外,如果它返回 null 意味着它失败了,所以在调用 getInstance 之前调用它是行不通的。

注意这是 FirebaseInstanceId 的 getInstance:

public static FirebaseInstanceId getInstance() {
    return getInstance(FirebaseApp.getInstance());
}

另一方面:

@Nullable
public static FirebaseApp initializeApp(Context var0) {
    Object var1 = sLock;
    synchronized(sLock) {
        if (zzf.containsKey("[DEFAULT]")) {
            return getInstance();
        } else {
            FirebaseOptions var2;
            return (var2 = FirebaseOptions.fromResource(var0)) == null ? null : initializeApp(var0, var2);
        }
    }
}

这意味着如果initializeApp 返回null,你可能有配置问题。至少 - 值得检查。要知道您在哪里,请在 Context 可见的某个点放置一个断点,并尝试评估 FirebaseApp.initialize(context) 以确保它不会返回 null。

【讨论】:

    【解决方案7】:

    请将项目build.gradle中的谷歌服务插件从4.1.0版降级到4.0.1版

    classpath 'com.google.gms:google-services:4.0.1'
    

    并将此代码添加到 onCreate()

    FirebaseApp.initializeApp(this);

    它对我有用。

    【讨论】:

      【解决方案8】:

      我也遇到了同样的问题,我注意到这个问题只发生在我添加 Firebase 存储依赖项时。 因此,当我使用 API 28 时,我确保所有 firebase 依赖项都具有相同的导入版本,即 16.0.5as 的存储依赖项。

      implementation 'com.google.firebase:firebase-core:16.0.5'
      implementation 'com.google.firebase:firebase-auth:16.0.5'
      implementation 'com.google.firebase:firebase-database:16.0.5'
      implementation 'com.google.firebase:firebase-storage:16.0.5'
      

      我将我的 gradle 版本更新为

      classpath 'com.android.tools.build:gradle:3.3.0'
      classpath 'com.google.gms:google-services:4.2.0'
      

      我在应用模块下面添加了一行

      apply plugin: 'com.google.gms.google-services'
      

      然后它对我有用。

      【讨论】:

      • 4.2.0 修复了其中的错误。
      【解决方案9】:

      更新 gradle 主类路径“com.google.gms:google-services:4.2.0”

      【讨论】:

        【解决方案10】:

        无需在 Application 类中添加任何内容或为 firebase 调用 initializeApp()。通过工具 -> Firebase ->(任何功能)-> 确保第 1 步和第 2 步为绿色并选中后,将 Firebase 功能添加到您的应用。

        转到项目 gradle 文件并使用 classpath 'com.google.gms:google-services:4.2.0'

        就是这样。

        【讨论】:

        • 为我工作。更新项目和模块的 Gradle 文件中的所有依赖项
        【解决方案11】:

        为防止出现此错误,需要按照为 Android https://firebase.google.com/docs/android/setup 设置 Firebase 所涉及的所有步骤进行操作

        我遇到了同样的错误,因为我忘记执行两个步骤并修复它

        1) 将 classpath 'com.google.gms:google-services:4.2.0' 添加到项目级 gradle 构建文件中。

        2) 将 apply plugin: 'com.google.gms.google-services' 添加到模块级 gradle 构建文件中。

        【讨论】:

          【解决方案12】:

          我有同样的问题,我修改了我的项目 build.gradle 如下

               dependencies {
          
              classpath 'com.android.tools.build:gradle:3.2.1'
              classpath 'com.google.gms:google-services:3.2.0'
          
          ....
                             }
          

          然后我将下面的行添加到应用程序模块中

                 apply plugin: 'com.google.gms.google-services'
          

          解决了

          【讨论】:

            【解决方案13】:

            我没有在我的项目中使用FirebaseApp.initializeApp(Context)

            它对我有用。你应该检查你的 gradle 文件并确保你实现了这些行:

            apply plugin: 'com.google.gms.google-services' 添加到您的 gradle(app) 中

            将此classpath 'com.google.gms:google-services:4.2.0' 添加到您的 gradle(项目)中。

            【讨论】:

              【解决方案14】:

              由于谷歌更新,您遇到此错误,您只需执行以下操作

              更改以下依赖项
              dependencies {
                      classpath 'com.android.tools.build:gradle:3.3.2'
              
                      // NOTE: Do not place your application dependencies here; they belong
                      // in the individual module build.gradle files
                      classpath 'com.google.gms:google-services:4.1.0'
                  }
              

               dependencies {
                          classpath 'com.android.tools.build:gradle:3.3.2'
                          // NOTE: Do not place your application dependencies here; they belong
                          // in the individual module build.gradle files
                          classpath 'com.google.gms:google-services:4.0.0'
                      }
              

              不同的是google-services:4.1.0应该改成4.0.0

              【讨论】:

                【解决方案15】:
                implementation 'com.google.firebase:firebase-core:16.0.6
                

                如果出现错误 FirebaseApp.initializeApp(Context) 在您的 build.gradle 中添加“mavenCentral”

                enter code here repositories {google() jcenter() mavenCentral() }
                

                【讨论】:

                  【解决方案16】:

                  尝试降级或升级 Gradle 版本。

                  例如,您的 build.gradle 有:

                  dependencies {
                      classpath 'com.android.tools.build:gradle:3.3.0'
                  }
                  

                  改成

                  dependencies {
                      classpath 'com.android.tools.build:gradle:3.2.0'
                  }
                  

                  【讨论】:

                    【解决方案17】:

                    尝试将您的应用添加到 Firebase 控制台并更新您应用中的新 google-services.json 文件。当我尝试使用另一个项目的数据库和 json 文件来实现应用程序时,这对我有用。

                    【讨论】:

                      【解决方案18】:

                      迁移后,您必须将依赖项更新到新的 SDK,检查:https://stackoverflow.com/a/61681739/5279996

                      【讨论】:

                        【解决方案19】:

                        您现在使用的是非常旧的 firebase 方法,您不需要使用

                        ***FirebaseApp.initializeApp(context)*** 
                        

                        删除这个。那么:

                        只需将带有包名的应用程序添加到您的 firebase 项目下载 google Json 文件 从此链接here 添加您的软件包名称,然后将下载的 google json 文件复制到您的“应用程序”中添加

                        将指示的库分为应用程序级别和项目级别的 gradle。现在只需同步

                        项目并且您已准备好使用 firebase。

                        【讨论】:

                          【解决方案20】:

                          出现这个错误,是因为你没有使用最新版本的firebase依赖。

                          将所有依赖项更新为最新的,一切顺利!

                          【讨论】:

                            【解决方案21】:

                            将这两行放在build.gradle(应用级别)

                            apply plugin: 'com.android.application'
                            apply plugin: 'com.google.gms.google-services' 
                            

                            (此图取自 Firebase > Settings > Android App > Method of setting SDK

                            如果正确,则会报错找不到文件'google-services.json'

                            然后你复制你的 google-service.json 生成的文件 Firebase > 设置 > Android App > 点击“google-services.json”生成文件。

                            您不必担心保存此文件的路径。 该错误将显示您需要在哪里保存此文件。 例如我保存在 app/ (在 build.gradle 旁边(应用级别))

                            【讨论】:

                              【解决方案22】:

                              使用 Kotlin,

                              "确保首先调用 FirebaseApp.initializeApp(Context) 安卓”

                              这是一个正确的 Firebase Analytics 初始化示例:

                              // declare_analytics
                              private lateinit var firebaseAnalytics: FirebaseAnalytics
                              
                              
                              
                              class MainActivity : AppCompatActivity() {
                                  override fun onCreate(savedInstanceState: Bundle?) {
                                      super.onCreate(savedInstanceState)
                                      setContentView(R.layout.activity_main)
                              
                              
                                      // Obtain the FirebaseAnalytics instance.
                                      firebaseAnalytics = Firebase.analytics
                              
                              
                                      val parameters = Bundle().apply {
                                          this.putString("level_name", "Jorgesys B. " + System.currentTimeMillis())
                                          this.putInt("level_difficulty", 10)
                                      }
                              
                                      firebaseAnalytics.setDefaultEventParameters(parameters)
                              
                              
                                  }
                              

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 2020-02-04
                                • 2019-08-23
                                • 2021-04-16
                                • 1970-01-01
                                • 2021-10-13
                                • 2020-01-04
                                相关资源
                                最近更新 更多