You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓壁纸应用管理员登录页面崩溃问题求助(Firebase)

安卓应用管理员登录页面崩溃问题排查

我是工程专业学生,正在开发一款基于Firebase存储的安卓壁纸查看下载应用。默认进入用户视图,但点击管理员登录按钮时应用崩溃。附上Login Activity代码及LogCat错误日志,请求协助解决。

Login Activity代码

public class Login extends AppCompatActivity {
    EditText Correo, Contraseña;
    Button Acceder;

    FirebaseAuth firebaseAuth;
    ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        ActionBar actionBar = getSupportActionBar();
        assert actionBar != null;
        actionBar.setTitle("Inicio Sesión");
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);

        Correo = findViewById(R.id.Correo);
        Contraseña = findViewById(R.id.Contraseña);
        Acceder = findViewById(R.id.Acceder);

        firebaseAuth = FirebaseAuth.getInstance();

        progressDialog = new ProgressDialog(Login.this);
        progressDialog.setMessage("Ingresando, espere por favor");
        progressDialog.setCancelable(false);

        Acceder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String correo = Correo.getText().toString();
                String contraseña = Contraseña.getText().toString();

                if (!Patterns.EMAIL_ADDRESS.matcher(correo).matches()) {
                    Correo.setError("Correo Invalido");
                    Correo.setFocusable(true);
                } else if (contraseña.length() < 6) {
                    Contraseña.setError("Contraseña debe ser mayor o igual a 6 digitos");
                    Contraseña.setFocusable(true);
                } else {
                    LogeoAdministradores(correo, contraseña);
                }
            }
        });
    }

    private void LogeoAdministradores (String correo, String contraseña){
        progressDialog.show();
        progressDialog.setCancelable(false);
        firebaseAuth.signInWithEmailAndPassword(correo,contraseña)
                .addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                            progressDialog.dismiss();
                            FirebaseUser user = firebaseAuth.getCurrentUser();
                            startActivity(new Intent(Login.this,MainActivityAdministrador.class));
                            assert user != null;
                            Toast.makeText(Login.this, "Bienvenido (a)" +user.getEmail(), Toast.LENGTH_SHORT).show();
                            finish();
                        }else{
                            progressDialog.dismiss();
                            UsuarioInvalido();
                        }
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        progressDialog.dismiss();
                        UsuarioInvalido();
                    }
                });
    }

    private void UsuarioInvalido() {
        AlertDialog.Builder builder = new AlertDialog.Builder(Login.this);
        builder.setCancelable(false);
        builder.setTitle("Ha ocurrido un error");
        builder.setMessage("Verifique si el correo o contraseña son correctos")
                .setPositiveButton("Entendido", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }
                }).show();
    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return super.onSupportNavigateUp();
    }
}

LogCat错误日志

2022-10-21 08:56:52.718 29357-29357/com.example.wallpaper_community E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.wallpaper_community, PID: 29357
    java.lang.AssertionError
        at com.example.wallpaper_community.Login.onCreate(Login.java:39)
        at android.app.Activity.performCreate(Activity.java:8214)
        at android.app.Activity.performCreate(Activity.java:8202)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4033)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4247)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2613)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:219)
        at android.app.ActivityThread.main(ActivityThread.java:8668)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)
2022-10-21 08:56:52.737 29357-29357/com.example.wallpaper_community I/Process: Sending signal. PID: 29357 SIG: 9
问题分析与解决方案

从日志可以明确,崩溃触发在Login.java:39行的assert actionBar != null;语句——因为getSupportActionBar()返回了null,断言失败导致应用崩溃。

核心修复步骤

  1. 替换断言为安全的空值判断
    移除原有的断言语句,改用if判断处理ActionBar:

    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setTitle("Inicio Sesión");
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
    }
    
  2. 检查Activity主题配置
    确认Login Activity使用的主题包含ActionBar:

    • 打开AndroidManifest.xml,查看该Activity的android:theme属性,确保不是NoActionBar系列主题(如Theme.MaterialComponents.DayNight.NoActionBar)
    • 若使用全局主题,检查res/values/styles.xml中的主题配置,保证主题继承自带ActionBar的样式(如Theme.MaterialComponents.DayNight.DarkActionBar)

额外优化建议

  • 将错误提示后的Contraseña.setFocusable(true);改为Contraseña.requestFocus();——前者是设置输入框是否可聚焦,后者才是让输入框主动获得焦点,符合交互逻辑
  • 登录成功后的assert user != null;同样存在风险,替换为空值判断:
    if (user != null) {
        Toast.makeText(Login.this, "Bienvenido (a) " + user.getEmail(), Toast.LENGTH_SHORT).show();
    }
    

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:50:40