【问题标题】:FirebaseApp not initializing despite FirebaseApp.initializeApp() being called in Application class尽管在 Application 类中调用了 FirebaseApp.initializeApp(),但 FirebaseApp 未初始化
【发布时间】:2016-09-26 16:51:31
【问题描述】:

我正在创建一个 Android 应用程序,目前正在尝试使用 Firebase 实现用户身份验证。据我所知,我的应用已连接到我的 Firebase 服务器。

我在尝试通过按下按钮从 SignIn 活动切换到 SignUp 活动时遇到运行时错误。应用程序崩溃,我遇到了运行时错误。

据我所知,运行时错误来自 SignUp 活动的 onCreate() 调用,当时我尝试使用 FirebaseAuth.getInstance() 初始化 FirebaseAuth 对象。由于

,此调用失败
java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process seniordesign.phoneafriend. Make sure to call FirebaseApp.initializeApp(Context).

但是,我在我的 Application 类的 onCreate() 方法中进行了这个调用,我认为这很好。我将initalizeApp() 调用添加到SignUp 的onCreate() 调用中,但没有骰子。我已经寻找其他有这个问题的人,但没有找到类似的东西。感谢您的帮助。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="seniordesign.phoneafriend">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name="seniordesign.phoneafriend.PhoneAFriend">
        <activity android:name=".SignIn">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

PhoneAFriend.java(我的应用程序类)

public class PhoneAFriend extends Application {

    public void onCreate(){
        super.onCreate();
        Firebase.setAndroidContext(this);
        FirebaseApp.initializeApp(this);
    }
}

SignUp.java

public class SignUp extends AppCompatActivity {
    protected Firebase ref;
    protected EditText emailText;
    protected EditText passText;
    protected EditText confirmText;
    protected Button button;
    protected SignUp thisContext;

    protected FirebaseAuth auth;
    protected FirebaseAuth.AuthStateListener authListener;
    private View.OnClickListener onClickListener;

    public static Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        ref = new Firebase("https://phoneafriend-7fb6b.firebaseio.com");
        emailText = (EditText) findViewById(R.id.signup_emailText);
        passText = (EditText) findViewById(R.id.signup_passwordText);
        confirmText = (EditText) findViewById(R.id.signup_passwordConfirm);
        intent = new Intent(this, SignIn.class);
        //Tried this already
        //FirebaseApp.initializeApp(this);
        auth = FirebaseAuth.getInstance();


        button = (Button) findViewById(R.id.signup_button);
        onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                createUser(view);
                Log.v("SignUp Button" , "Clicked; Attempting to create user");
            }
        };
        button.setOnClickListener(onClickListener);

        authListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged( FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                    Log.d("FirebaseAuth", "onAuthStateChanged:signed_in:" + user.getUid());
                } else {
                    // User is signed out
                    Log.d("FirebaseAuth", "onAuthStateChanged:signed_out");
                }
                // ...
            }
        };
        thisContext = this;

    }
    @Override
    public void onStart(){
        super.onStart();
        //auth.addAuthStateListener(authListener);
    }

    @Override
    public void onStop(){
        super.onStop();
        if(authListener != null) {
            //auth.removeAuthStateListener(authListener);
        }
    }

    protected void createUser(View view){
        String cString = null;
        String pString = null;
        String eString  = emailText.getText().toString();
        if(passText.getText() != null && confirmText.getText() != null) {
            pString = passText.getText().toString();
            cString = confirmText.getText().toString();
            Log.v("SignUP: Pass Null check" , "Pass" );
            if (emailText.getText() != null && pString.equals(cString) && passText.getText() != null) {
                Log.v("SignUP: Sign up check " , "Pass");
                auth.createUserWithEmailAndPassword(emailText.getText().toString() , passText.getText().toString())
                        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                Log.v("createUser complete" , "status: " + task.isSuccessful());
                                if(task.isSuccessful()){
                                    startActivity(SignUp.intent);
                                }
                            }

                        });

            }
        }

        return;
    }
}

【问题讨论】:

  • 您正在混合来自旧版 2.x.x 的 API 调用。 SDK 与新的 9.x.x SDK,它们不兼容。您应该只使用新的 SDK。请参阅此相关答案:stackoverflow.com/a/39321686/4815718

标签: android firebase


【解决方案1】:

我知道已经有一个公认的答案。但是,我遇到了同样的错误消息:java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process (name). Make sure to call FirebaseApp.initializeApp(Context). 我尝试了在 SO 上找到的几种解决方案,并仔细检查了所有内容,直到我最终发现 Firebase 控制台中定义的包名称与清单文件中定义的包名称不匹配。

尝试转到您的 Firebase 控制台 -> 项目设置 -> 检查包名称是否匹配。

希望对大家有所帮助:)

【讨论】:

    【解决方案2】:

    正如 qbix 所说,无论您要使用哪个版本,您都可以使用 API 调用。如果可能,您应该使用更新的 API,因为它肯定会在未来得到更进一步的支持。

    在此处查看文档:

    https://firebase.google.com/docs/database/android/start/

    删除:

    Firebase.setAndroidContext(this);
    FirebaseApp.initializeApp(this);
    

    然后放:

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    

    如果 qbix 将他的评论放入答案中,您应该接受他的而不是我的,看看他是如何在几分钟内击败我的。

    还有:

    如果您正在使用旧版 Firebase 并需要帮助切换,那么本指南可以帮助您进行切换。这是一个相当简单的开关。

    https://firebase.google.com/support/guides/firebase-android

    【讨论】:

    • classpath 'com.google.gms:google-services:3.0.0' 用于项目 gradle。 compile 'com.google.android.gms:play-services:9.8.0' compile 'com.google.firebase:firebase-core:9.8.0' 用于应用程序 gradle,但我仍然遇到问题。有什么想法吗?
    • 您提供的链接是 Firebase 实时数据库。它与 FirebaseApp.initializeApp() 没有冲突
    【解决方案3】:

    我在删除并重新克隆了我的应用程序并忘记在应用程序模块中包含 google-services.json 后遇到了这个问题。我重新添加后,问题就消失了。不过,您应该在自定义 Application 类中初始化上下文:

    class MyApplication : Application() {
        override fun onCreate() {
            super.onCreate()
            FirebaseApp.initializeApp(this)
        }
    }
    
    <manifest 
        package="your.app">
    
        <application
            android:name=".MyApplication"
    

    【讨论】:

      【解决方案4】:

      使用 Android Studio 中包含的 Firebase 向导 更容易:它将所有依赖项添加到 gradle 文件中,如果需要,创建 firebase 项目,连接带有项目的应用等。

      在 Android Studio 中打开 菜单工具/Firebase 并按照说明进行操作。

      然后 FirebaseApp.initializeApp() 将返回一个有效值。

      【讨论】:

      • 除了我们中的一些人正在使用 Xamarin 之类的东西,所以没有 Firebase 向导这样的东西。
      【解决方案5】:

      首先检查的是 Firebase 文档和来自

      的工具

      Android Studio -> 工具 -> Firebase -> 云消息传递

      即使你以前做过。

      请参阅thisthatthat

      同样,即使您之前已经这样做了,因为 Firebase 版本往往需要最新的配置 JSON。

      【讨论】:

        【解决方案6】:

        在非常沮丧之后,启用 Internet 权限为我解决了这个问题。

        【讨论】:

          【解决方案7】:

          在 Gradle 为我工作的项目中将 classpath 'com.google.gms:google-services:4.1.0' 升级到 classpath 'com.google.gms:google-services:4.2.0'

          【讨论】:

            【解决方案8】:

            2019 年更新:如果您将 Firebase 依赖项更新到最新版本,那么您也应该更新 Google play services

            在撰写此答案期间,我已将所有 Firebase 库更新为 17.0.+,但我的 Google Play 服务仍指向 4.1.0

            将播放服务版本更新到 4.3.0(Latest) 为我修复了它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-11-27
              • 1970-01-01
              • 2021-10-13
              • 2020-01-04
              • 2019-09-06
              • 2021-02-11
              • 2021-06-13
              • 1970-01-01
              相关资源
              最近更新 更多