Android FirebaseAuth.getInstance()在FirebaseModule中返回null

Android FirebaseAuth.getInstance()在FirebaseModule中返回null,android,firebase,firebase-authentication,dagger-2,android-mvp,Android,Firebase,Firebase Authentication,Dagger 2,Android Mvp,我正在使用模型视图演示器方法开发我的应用程序。 我还使用了Dagger2,我创建了这个模块: @Module public class FirebaseModule { @Provides @Singleton public DatabaseReference provideDatabaseReference(){ return FirebaseDatabase.getInstance().getReference(); } @Provides public FirebaseAut

我正在使用模型视图演示器方法开发我的应用程序。 我还使用了Dagger2,我创建了这个模块:

@Module
public class FirebaseModule {


@Provides @Singleton
public DatabaseReference provideDatabaseReference(){
    return FirebaseDatabase.getInstance().getReference();
}

@Provides
public FirebaseAuth provideFirebaseAuth(){
    return FirebaseAuth.getInstance();
}
}
这是我的模型,可以更新演示者:

public class FirebaseModel implements Model, FirebaseAuth.AuthStateListener {

@Inject
FirebaseAuth auth;

Presenter presenter;
FirebaseUser user;

@Inject
public FirebaseModel(Presenter presenter) {
    this.presenter = presenter;

}


@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    user = auth.getCurrentUser();
    presenter.updateUser(user);

}


@Override
public void loadUser() {

    auth.addAuthStateListener(this);
}
}
问题是

FirebaseAuth auth;
返回
NullPointerException
。 我已经读到,这个getInstance()必须在
MainActivity
onCreate()
方法中完成,但是在这种情况下,它破坏了MVP方法,因为视图逻辑必须是被动的

那么在这种情况下我该怎么办呢


谢谢你

你想做什么?字段注入还是构造函数注入?目前,您有一个带注释的字段(
FirebaseAuth-auth
)和一个带注释的构造函数。在这种情况下,我想做一个构造函数注入,但我需要在这个模型中使用FirebaseAuth,所以我想注入这个依赖项。它错了吗?CoConstructor注入意味着您在构造函数中声明依赖项(不是通过注释字段)
@injectfirebasemodel(演示者演示者,FirebaseAuth auth)
注入构造函数o如果我需要使用构造函数注入,我可以避免@inject,我可以声明私有的FirebaseAuth FirebaseAuth?构造函数注入意味着dagger将调用您的构造函数并传入依赖项。您可以隐藏字段,而不必注释它们。您想在中做什么?字段或构造函数注入?当前您有一个带注释的字段(
FirebaseAuth auth
)和一个带注释的构造函数。在这种情况下,我想进行构造函数注入,但我需要在这个模型中使用FirebaseAuth,所以我想注入这个依赖项。这是错误的吗?CoConstructor注入意味着您在构造函数中声明依赖项(不是通过注释字段)
@injectfirebasemodel(演示者演示者,FirebaseAuth auth)
要注入构造函数,如果我需要使用构造函数注入,我可以避免@inject,我可以声明私有FirebaseAuth FirebaseAuth?构造函数注入意味着dagger将调用您的构造函数并传入依赖项。您可以隐藏字段,而不必对其进行注释