注入GoogleSignInClient实现Firebase认证出现空指针异常如何解决
问题根源
你遇到的空指针是因为GoogleSignInClient没有被Dagger2成功注入到AuthActivity,核心遗漏了3处配置:
1. AppComponent缺少注入目标声明
你当前的AppComponent没有声明要注入的目标Activity,Dagger2不知道需要给AuthActivity里的@Inject字段赋值。
修改后的AppComponent代码如下:
@Singleton // 必须加,因为Module里的依赖声明了Singleton作用域 @Component(modules = {AuthModule.class, AppModule.class}) public interface AppComponent { // 新增注入方法,指定注入目标为AuthActivity void inject(AuthActivity authActivity); @Component.Builder interface Builder { @BindsInstance Builder application(Application application); AppComponent build(); } }
2. 没有自定义Application类初始化全局Component
你需要在应用启动时初始化一次单例的AppComponent,首先创建自定义Application类:
public class MyApplication extends Application { private AppComponent appComponent; @Override public void onCreate() { super.onCreate(); appComponent = DaggerAppComponent.builder() .application(this) .build(); } public AppComponent getAppComponent() { return appComponent; } }
之后要在AndroidManifest.xml的application标签中添加配置,让自定义Application生效:
<application android:name=".MyApplication" <!-- 其他原有配置 --> > <!-- Activity等组件配置 --> </application>
3. AuthActivity没有主动触发注入
你需要在AuthActivity的onCreate生命周期中,在使用signInClient之前主动触发注入:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 先执行注入,再做其他初始化操作 ((MyApplication) getApplication()).getAppComponent().inject(this); setContentView(R.layout.activity_auth); // 后续逻辑,比如给登录按钮绑定点击事件触发signIn() }
其他可选检查项
如果做完上述配置还有问题,可以检查这两处:
- 确认项目已经正确接入Firebase,
google-services.json已经放到app模块根目录,根目录和app模块的build.gradle都正确配置了google-services插件,R.string.default_web_client_id能正常识别,不会为空导致GoogleSignInOptions创建失败。 - 确认app模块的
build.gradle已经正确引入Dagger2的注解处理器依赖,编译时能正常生成DaggerAppComponent类。
内容的提问来源于stack exchange,提问作者user17124758
相关产品推荐
相关产品推荐

