【问题标题】:Firebase Authentication With Email & Password使用电子邮件和密码进行 Firebase 身份验证
【发布时间】:2026-02-10 02:50:01
【问题描述】:

我对 Android Studio 和 Firebase 也比较陌生。我已完成设置并连接到 Firebase,但此错误不断弹出,导致应用崩溃:

 --------- beginning of crash
2019-01-17 14:38:11.420 10795-10795/com.example.asus.cab E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.asus.cab, PID: 10795
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.asus.cab/com.example.asus.cab.DriverLoginRegisterActivity}: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.asus.cab. Make sure to call FirebaseApp.initializeApp(Context) first.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2902)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6642)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.asus.cab. Make sure to call FirebaseApp.initializeApp(Context) first.
        at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@16.0.4:240)
        at com.google.firebase.auth.FirebaseAuth.getInstance(Unknown Source:1)
        at com.example.asus.cab.DriverLoginRegisterActivity.onCreate(DriverLoginRegisterActivity.java:45)
        at android.app.Activity.performCreate(Activity.java:7131)
        at android.app.Activity.performCreate(Activity.java:7122)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2882)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3037) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6642) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

我也像这样初始化 Firebase 身份验证,mAuth = FirebaseAuth.getInstance();但我仍然遇到同样的错误

我也确实包含了依赖项classpath 'com.google.gms:google- services:4.1.0'

和插件apply plugin: 'com.google.gms.google-services' 大多数解决方案中都提到了这些,但似乎没有任何效果

这是以下代码,根据 logcat,第 48 行的错误指向 mAuth = FirebaseAuth.getInstance();

public class DriverLoginRegisterActivity extends AppCompatActivity {

    private Button DriverLoginButton;
    private Button DriverRegisterButton;
    private TextView DriverRegisterLink;
    private TextView DriverStatus;
    private EditText EmailDriver;
    private EditText PasswordDriver;
    private ProgressDialog loadingBar;
    private FirebaseAuth mAuth;

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

        DriverLoginButton = (Button) findViewById(R.id.driver_login_btn);
        DriverRegisterButton = (Button) findViewById(R.id.driver_register_btn);
        DriverRegisterLink = (TextView) findViewById(R.id.register_driver_link);
        DriverStatus = (TextView) findViewById(R.id.driver_status);
        EmailDriver = (EditText) findViewById(R.id.email_driver);
        PasswordDriver = (EditText) findViewById(R.id.password_driver);
        loadingBar = new ProgressDialog(this);

        // Initialize Firebase Auth
        mAuth = FirebaseAuth.getInstance();

        DriverRegisterButton.setVisibility(View.INVISIBLE);
        DriverRegisterButton.setEnabled(false);

        DriverRegisterLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DriverLoginButton.setVisibility(View.INVISIBLE);
                DriverRegisterLink.setVisibility(View.INVISIBLE);
                DriverStatus.setText("Register Driver");   
                DriverRegisterButton.setVisibility(View.VISIBLE);
                DriverLoginButton.setEnabled(true);
            }
        });

        DriverRegisterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                String email = EmailDriver.getText().toString();
                String password = PasswordDriver.getText().toString();

                RegisterDriver(email, password);
            }
        });


    }

    private void RegisterDriver(String email, String password) {
        if (TextUtils.isEmpty(email)) {
            Toast.makeText(DriverLoginRegisterActivity.this, "Please Enter Email..", Toast.LENGTH_SHORT).show();

        }

        if (TextUtils.isEmpty(password)) {
            Toast.makeText(DriverLoginRegisterActivity.this, "Please Enter Password..", Toast.LENGTH_SHORT).show();

        } else {
            loadingBar.setTitle("Driver Registration");
            loadingBar.setMessage("Please wait...");
            loadingBar.show();


            mAuth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(DriverLoginRegisterActivity.this, "Driver Register Succesful..", Toast.LENGTH_SHORT).show();
                                loadingBar.dismiss();
                            } else {
                                Toast.makeText(DriverLoginRegisterActivity.this, "Registration Unsuccessful, Please Try Again..", Toast.LENGTH_SHORT).show();
                                loadingBar.dismiss();
                            }
                        }
                    });
        }
    }
}

【问题讨论】:

  • 谢谢大家!已经找到解决方案了!谢谢大家,不胜感激!

标签: android firebase firebase-authentication


【解决方案1】:

确保您遵循 firebase 文档的每一步:
Firebase documentation on auth
您需要将 google 服务添加到您的项目级 gradle 文件中:

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

并且您需要将 firebase 核心依赖项添加到您的应用级 gradle 文件中:

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

确保您在登录方法下的控制台中启用了身份验证选项

【讨论】:

  • 是的,我已经按照这些步骤操作了,但我仍然有这个问题:(
  • mAuth = FirebaseAuth.getInstance();应该解决了这个问题。我从未使用过 FirebaseApp.initializeApp(this);
  • 实际上,我使用的是版本类路径“com.google.gms:google-services:4.1.0”,我将其更改为类路径“com.google.gms:google-services:4.2”。 0' 并且有效!谢谢!!!!!!
【解决方案2】:

您的 logcat 本身可以解决您的问题:

您需要在应用程序类中调用 FirebaseApp.initializeApp(Context)

【讨论】:

  • 我已经添加了它,但它仍然有完全相同的错误。
【解决方案3】:

您收到此错误是因为在您的代码中,您尚未初始化 firebase。

只需将其添加到活动的 on create 方法中

FirebaseApp.initializeApp(this);
mAuth = FirebaseAuth.getInstance();

【讨论】:

  • 我已经添加了它,但它仍然有完全相同的错误
【解决方案4】:

正如之前有人指出的那样,该错误表明您错过了调用 FirebaseApp.initializeApp(Context) 方法或顺序不正确。

最近有使用 Firebase Auth SDK 的更新,新方法非常简单且代码最少。更多详情请参考这里https://firebase.google.com/docs/auth/android/firebaseui

这是设置身份验证提供程序和启动身份验证意图的方法。您需要为回调处理和 UI 自定义(如果适用)添加单独的逻辑,这些逻辑也可在上述文档链接中找到。

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);

【讨论】:

    最近更新 更多