尽管在Application类中调用了FirebaseApp.initializeApp(),FirebaseApp仍未初始化

The*_*lex 14 android firebase

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

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

据我所知,onCreate()当我尝试使用初始化FirebaseAuth对象时,运行时错误来自SignUp活动的调用FirebaseAuth.getInstance().此呼叫因此失败

java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process seniordesign.phoneafriend. Make sure to call FirebaseApp.initializeApp(Context).
Run Code Online (Sandbox Code Playgroud)

但是,我在我的应用程序类的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>
Run Code Online (Sandbox Code Playgroud)

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

public class PhoneAFriend extends Application {

    public void onCreate(){
        super.onCreate();
        Firebase.setAndroidContext(this);
        FirebaseApp.initializeApp(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 9

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

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

希望它可以帮助一些:)


Rya*_*yan 4

正如 qbix 所说,无论您要使用哪个版本,您都会经常使用 API 调用。如果可能,您应该使用较新的 API,因为将来肯定会进一步支持它。

请参阅此处的文档:

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

消除:

Firebase.setAndroidContext(this);
FirebaseApp.initializeApp(this);
Run Code Online (Sandbox Code Playgroud)

并把:

FirebaseDatabase database = FirebaseDatabase.getInstance();
Run Code Online (Sandbox Code Playgroud)

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

还:

如果您使用的是旧版 Firebase 并且需要切换方面的帮助,本指南非常适合,可以帮助您进行切换。这是一个相当简单的开关。

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