安卓壁纸应用管理员登录页面崩溃问题求助(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,断言失败导致应用崩溃。
核心修复步骤
替换断言为安全的空值判断
移除原有的断言语句,改用if判断处理ActionBar:ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setTitle("Inicio Sesión"); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowHomeEnabled(true); }检查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
相关产品推荐
相关产品推荐

