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

报错: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:15:56