点击注册按钮APP崩溃,FirebaseApp未初始化问题求助
问题解决:Firebase未初始化导致APP崩溃
异常信息
IllegalStateException: Default FirebaseApp is not initialized in this process typroject. Make sure to call FirebaseApp.initializeApp(Context) first。
问题场景
点击注册按钮时APP崩溃,使用Firebase Auth和Database功能,自行添加的Firebase相关依赖如下:
implementation 'com.google.firebase:firebase-auth:21.1.0' implementation 'com.google.firebase:firebase-database:20.1.0' implementation 'com.google.firebase:firebase-firestore:24.4.2' implementation 'com.google.firebase:firebase-storage:20.1.0'
RegisterActivity代码:
package com.example.typroject; public class registerActivity extends AppCompatActivity { private DatabaseReference mRootref; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); mRootref = FirebaseDatabase.getInstance().getReference(); mAuth = FirebaseAuth.getInstance(); register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String txtUsername = username.getText().toString(); String txtName = name.getText().toString(); String txtemail = email.getText().toString(); String txtpassword = password.getText().toString(); if(TextUtils.isEmpty(txtUsername) || TextUtils.isEmpty(txtName) || TextUtils.isEmpty(txtemail) || TextUtils.isEmpty(txtpassword)){ Toast.makeText(registerActivity.this, "Empty Credentials", Toast.LENGTH_SHORT).show(); } else if (txtpassword.length() < 6) { Toast.makeText(registerActivity.this, "Password is too Short", Toast.LENGTH_SHORT).show(); }else { registeruser(txtUsername, txtName , txtemail , txtpassword ); // startActivity(new Intent(registerActivity.this , MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)); } } }); } private void registeruser(String Username, String Name, String email, String password) { mAuth.createUserWithEmailAndPassword(email, password).addOnSuccessListener(new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { HashMap<String , Object> map = new HashMap<>(); map.put("username" , username); map.put("name" , name); map.put("email" , email); map.put("password" , password); map.put("id" , mAuth.getCurrentUser().getUid()); mRootref.child("Users").child(mAuth.getCurrentUser().getUid()).setValue(map).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { Intent intent = new Intent(registerActivity.this , MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); } }); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(registerActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); } }); } }
解决方案
1. 补充Firebase配置文件与插件
- 从Firebase控制台下载
google-services.json文件,放置到app模块根目录(与app/build.gradle同级)。 - 确认项目级build.gradle中添加Google Services插件依赖:
buildscript { dependencies { classpath 'com.google.gms:google-services:4.4.0' // 或最新兼容版本 } } - 在app级build.gradle末尾添加插件应用代码:
apply plugin: 'com.google.gms.google-services'
2. 统一Firebase依赖版本
不同Firebase组件版本不一致会引发初始化异常,推荐用Firebase BOM统一管理版本:
// 在app级build.gradle中添加BOM依赖 implementation platform('com.google.firebase:firebase-bom:32.7.0') // 使用最新稳定版本 // 移除各组件的版本号,由BOM统一管理 implementation 'com.google.firebase:firebase-auth' implementation 'com.google.firebase:firebase-database' implementation 'com.google.firebase:firebase-firestore' implementation 'com.google.firebase:firebase-storage'
3. 可选:手动初始化Firebase
若自动初始化失败,可自定义Application类手动初始化:
- 创建自定义Application类:
package com.example.typroject; import android.app.Application; import com.google.firebase.FirebaseApp; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); FirebaseApp.initializeApp(this); } }
- 在AndroidManifest.xml中指定该Application:
<application android:name=".MyApplication" ...> ... </application>
4. 修复代码中的其他潜在问题
- View未初始化:register、username等View需在onCreate中用
findViewById绑定,否则会抛出NullPointerException:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); // 绑定View(替换为你的实际控件ID) Button register = findViewById(R.id.register_btn); EditText username = findViewById(R.id.username_et); EditText name = findViewById(R.id.name_et); EditText email = findViewById(R.id.email_et); EditText password = findViewById(R.id.password_et); mRootref = FirebaseDatabase.getInstance().getReference(); mAuth = FirebaseAuth.getInstance(); // 后续代码... } - 数据存储错误:registeruser方法中,map存储的是View对象而非用户输入文本,应改为传入的参数:
map.put("username", Username); // 替换原代码中的username(View对象) map.put("name", Name); // 替换原代码中的name(View对象) - 类名规范:registerActivity应改为RegisterActivity,符合Java大驼峰命名规范。
内容的提问来源于stack exchange,提问作者Rushikesh Vadnal
相关产品推荐
相关产品推荐

