报错:Default FirebaseApp未初始化,如何解决?附MainActivity代码
Firebase初始化错误排查与解决
运行com.example.ecom应用时触发以下错误:
Default FirebaseApp is not initialized in this process com.example.ecom. Make sure to call FirebaseApp.initializeApp(Context) first
用户提供的MainActivity.java代码如下:
package com.example.ecom; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.example.ecom.Model.Users; import com.example.ecom.Prevalent.Prevalent; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import io.paperdb.Paper; public class MainActivity extends AppCompatActivity { private Button joinNowButton, loginButton; private ProgressDialog loadingBar; private DataSnapshot dataSnapshot; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); joinNowButton = (Button) findViewById(R.id.main_join_now_btn); loginButton = (Button) findViewById(R.id.main_login_btn); loadingBar = new ProgressDialog(this); Paper.init(this); loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, LoginActivity1.class); startActivity(intent); } }); joinNowButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,RegisterActivity.class); startActivity(intent); } }); String UserPhoneKey = Paper.book().read(Prevalent.UserPhoneKey); String UserPasswordKey = Paper.book().read(Prevalent.UserPasswordKey); if (UserPhoneKey!="" && UserPasswordKey!="") { if (!TextUtils.isEmpty(UserPhoneKey) && !TextUtils.isEmpty(UserPasswordKey)) { AllowAccess(UserPhoneKey,UserPasswordKey); loadingBar.setTitle("Already Logged in"); loadingBar.setMessage("Please wait..."); loadingBar.setCanceledOnTouchOutside(false); loadingBar.show(); } } } private void AllowAccess(final String phone, final String password) { final DatabaseReference RootRef; RootRef = FirebaseDatabase.getInstance().getReference(); RootRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { if (dataSnapshot.child("Users").child(phone).exists()) { Users usersData = dataSnapshot.child("Users").child(phone).getValue(Users.class); if (usersData.getPhone().equals(phone)) { if (usersData.getPassword().equals(password)) { Toast.makeText(MainActivity.this, "please wait, logging in...", Toast.LENGTH_SHORT).show(); loadingBar.dismiss(); Intent intent = new Intent(MainActivity.this,HomeActivity.class); Prevalent.currentOnlineUser = usersData; startActivity(intent); } else { loadingBar.dismiss(); Toast.makeText(MainActivity.this, "Incorrect Password.", Toast.LENGTH_SHORT).show(); } } } else { Toast.makeText(MainActivity.this, "Account with this" + phone+ "number do not exists", Toast.LENGTH_SHORT).show(); loadingBar.dismiss(); } } @Override public void onCancelled(@NonNull DatabaseError error) { } }); } }
问题排查与修复步骤
1. 解决Firebase初始化核心问题
这个错误的本质是Firebase未在应用进程中完成初始化,按以下步骤排查:
- 检查配置文件:确认
google-services.json已放置在app模块根目录(Android Studio中是app/文件夹),该文件需从Firebase控制台下载对应项目的配置。 - 验证Gradle配置:
- 项目根目录的
build.gradle中需包含Google服务插件依赖:buildscript { dependencies { classpath 'com.google.gms:google-services:4.4.1' // 建议使用最新稳定版 } } - app模块的
build.gradle末尾需添加插件应用:apply plugin: 'com.google.gms.google-services'
- 项目根目录的
- 手动初始化(自动初始化失效时):如果上述配置都正确但仍报错,在
MainActivity的onCreate方法最开始手动初始化Firebase:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 手动初始化Firebase FirebaseApp.initializeApp(this); setContentView(R.layout.activity_main); // 后续原有代码保持不变 }
2. 修复代码中的空指针bug
你的AllowAccess方法里存在一个明显错误:在onDataChange回调中错误使用了全局的dataSnapshot变量,而非方法参数传入的snapshot,这会导致空指针异常,修复如下:
@Override public void onDataChange(@NonNull DataSnapshot snapshot) { // 替换全局dataSnapshot为方法参数snapshot if (snapshot.child("Users").child(phone).exists()) { Users usersData = snapshot.child("Users").child(phone).getValue(Users.class); // 后续代码保持不变 } }
3. 优化字符串判断逻辑
代码中判断字符串非空的写法UserPhoneKey!=""存在问题,Java中字符串比较需用equals方法,或者直接使用TextUtils.isEmpty(你后面已经用了),可以简化为:
String UserPhoneKey = Paper.book().read(Prevalent.UserPhoneKey); String UserPasswordKey = Paper.book().read(Prevalent.UserPasswordKey); if (!TextUtils.isEmpty(UserPhoneKey) && !TextUtils.isEmpty(UserPasswordKey)) { AllowAccess(UserPhoneKey,UserPasswordKey); loadingBar.setTitle("Already Logged in"); loadingBar.setMessage("Please wait..."); loadingBar.setCanceledOnTouchOutside(false); loadingBar.show(); }
内容的提问来源于stack exchange,提问作者user16694616
相关产品推荐
相关产品推荐

