确保在 Android 中首先调用 FirebaseApp.initializeApp (Context)

我正面临这个问题,看到了一些答案,但没有得到任何适当的解决方案。
我已经使用以前的版本的 Firebase工作得很好,但是当我试图升级使用 升级和更新 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);


}
});
}
}
144729 次浏览

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

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

在应用程序级别的末尾添加 apply plugin: 'com.google.gms.google-services':

dependencies {
....
}


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

插件是从 firebase 处理 json 配置和避免依赖项冲突所必需的。您可以阅读 给你了解更多细节。

遇到同样的问题,用这种方法解决:

活动:

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

应用程序的等级(在文件的末尾) :

dependencies {
....
}


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

是项目的阶梯:

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

首先: 项目配置 JSON 在升级 Firebase 时可能会出错/过时。

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

即使您过去已经这样做了,也值得再次检查 给你,因为事情会不时更新。我同步了我的项目,它解决了问题。

至于调用 FirebaseApp.initializeApp,它是没有必要的,至少对于 FCM 来说是没有必要的。参见 FCM 文件

此外,如果它返回 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。

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

我调用这个初始化,有时,用户得到崩溃的时候,当用户打开我的应用程序,所以我删除这行代码,然后一切都很好。请注意调用此初始化.

FirebaseApp 文档的捕获:

enter image description here

更新: 下面的异常将会发生,如果你试图添加这一行[一些广告网络需要这一行,他们也添加了一些进程在他们的 AndroidManifest]

未能获得针对火灾恢复客户端的脱机持久性的独占锁定。这通常意味着您在应用程序中使用来自多个进程的 Firestore。请记住,多进程 Android 应用程序在所有进程中都会执行 Application 类中的代码,因此您可能需要避免在 Application 类中初始化 Firest。如果您有意使用来自多个进程的 Firest,那么您只能在其中一个进程中启用离线持久性(即调用 setPersisenceEnable (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)包装 ApplicationonCreate

@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 没有在这个过程中初始化。确保首先调用 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
}

我有同样的问题,我修改了我的项目构建

     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'

然后就解决了

我也有同样的问题,我注意到这个问题只发生在我添加 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'

我更新了我的等级版本

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'

那我就成功了。

花了整整一天,最后,这就是解决办法。

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

在 Project gradle 中,使用 Google 服务: 4.0而不是4.1。

另外,根据我的经验,在最后应用插件语句也是没有必要的。

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

implementation 'com.google.firebase:firebase-core:16.0.6

如果错误 FirebaseApp.initializeApp (Context) ,请在 build.gradle 中添加“ mavenCentral”

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

更新 gradle 主类路径‘ com.google.gms: google-services: 4.2.0’

  1. 我以前也遇到过同样的问题。

    您试图在不初始化 Firebase 的情况下获取它的实例。 类的实例之前,请添加此代码行 火力点:

    只需导入最新版本的 Firebase 和谷歌播放服务。

    最新更新版本(例子) :

增加这些线

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
}

就这样,祝你编程愉快。

尝试降级或升级 Gradle 版本。

例如,build.gradle 具有:

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

换衣服

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

不需要在 Application 类中添加任何东西,也不需要为 firebase 调用 initializeApp ()。通过工具-> Firebase-> (任何功能)-> 确保步骤1和步骤2是绿色并选中。

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

就是这样。

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

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

并将此代码添加到 onCreate ()

FirebaseApp.initializeApp(this);

对我很有效。

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

这对我很有用。你应该检查你的等级文件,并确保你实现了以下几行:

apply plugin: 'com.google.gms.google-services'添加到你的等级(应用程序)

或者

将这个 classpath 'com.google.gms:google-services:4.2.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.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

而且你可能会错过这个插件 apply plugin: 'com.google.gms.google-services'

为了防止此错误,需要遵循为 android https://firebase.google.com/docs/android/setup设置 Firebase 所涉及的所有步骤

我得到了同样的错误,因为我忘记了遵循两个步骤,并修正了它

1)将 Classspath‘ com.google.gms: google-services: 4.2.0’类路径‘ com.google.gms: google-services: 4.2.0’添加到项目级别的分级构建文件中。

2)将 应用插件: ‘ com.google.gms.google-services’添加到模块级分级构建文件中。

尝试添加您的应用程序到火灾基地控制台和更新新的谷歌服务。应用程序中的 json 文件。当我试图用另一个项目的数据库和 json 文件来实现这个应用程序时,这对我很有用。

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

你现在使用的是非常古老的方法,现在你不需要使用

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

然后:

只需添加您的应用程序与软件包名称到您的 Firebase 项目下载谷歌 Json 文件 从这个链接 给你 添加您的软件包名称,然后复制下载的谷歌 json 文件在您的“应用程序”现在添加

指导库分为应用程序级和项目级。现在只需同步

项目,你已经准备好使用防火基地。

发生此错误时,是因为您没有使用最新版本的 firebase 依赖项。

将所有依赖项更新到最新的依赖项,然后就可以开始了!

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

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

enter image description here (这张图片来自 Firebase > Settings > Android App > Method of set SDK

如果它是正确的,它将产生错误无法找到文件‘ google-services. json’

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

您不必担心保存此文件的路径。 该错误将显示保存此文件所需的位置。 例如,我保存在 app/中(紧挨着 build.gradle (app 级别))

利用科特林,

”确保首先调用 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)




}