为了账号安全,请及时绑定邮箱和手机立即绑定

错误:[Dagger/MissingBinding]

错误:[Dagger/MissingBinding]

慕尼黑的夜晚无繁华 2021-08-06 10:05:47
我想用一个主要活动和多个片段制作一个简单的项目。在这里,我在一个活动中有两个片段,我想将演示者注入登录片段,但它不起作用。我的错误在哪里?主应用程序public class MainApplication extends DaggerApplication{private static ApplicationComponent component;@Overridepublic void onCreate() {    super.onCreate();    Utils.init(this);}public static ApplicationComponent getComponent() {    return component;}protected AndroidInjector<? extends DaggerApplication> applicationInjector() {    component =     DaggerApplicationComponent.builder().application(this).build();    component.inject(this);    return component;  }}主活动.javapublic class MainActivity extends DaggerAppCompatActivity  {private Fragment[] mFragments = new Fragment[2];private int curIndex;@InjectHomeFragment homeFragment;@InjectLoginFragment loginFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    if (savedInstanceState != null) {        curIndex = savedInstanceState.getInt("curIndex");    }    mFragments[AppConstant.HOME_FRAGMENT] = homeFragment;    mFragments[AppConstant.LOGIN_FRAGMENT] = loginFragment;    FragmentUtils.add(getSupportFragmentManager(), mFragments,   R.id.container, curIndex);    showCurrentFragment(AppConstant.LOGIN_FRAGMENT);}private void showCurrentFragment(int index) {    FragmentUtils.showHide(curIndex = index, mFragments);}@Overridepublic void onSaveInstanceState(Bundle outState, PersistableBundle   outPersistentState) {    super.onSaveInstanceState(outState, outPersistentState);    outState.putInt("curIndex", curIndex);  } }应用组件.java@Singleton@Component(modules = {    ContextModule.class,    ApiServiceModule.class,    AndroidSupportInjectionModule.class,    ActivityBuilder.class })  public interface ApplicationComponent extends          AndroidInjector<DaggerApplication> {void inject(MainApplication component);@Component.Builderinterface Builder {    ApplicationComponent build();    @BindsInstance    Builder application(MainApplication application);}}
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

你使用@inject 来注解 LoginFragment 的构造函数,当一个新的实例被请求时,Dagger 构造你的 LoginFragment 类的实例并满足它们的依赖关系(比如 mPresenter 字段)。因为 MainActivitySubcomponent 不访问 LoginFragmentModule,所以 Dagger 给你一个错误,不能提供 LoginContract.Presenter。而不是使用构造函数注入,如果您使用另一种方式为 MainActivity 提供 LoginFragment,则问题将得到解决。您应该从 LoginFragment 构造函数中删除 @inject 并创建一个模块来提供它,如下例所示:


@Module

public class MainModule {


    @Provides

    public static LoginFragment provideLoginFragment() {

        return LoginFragment.newInstance("param1", "param2");

    }


}

Dagger 提示:不要对系统实例化的对象使用构造函数注入。在android中,为了在activity和fragment中注入依赖,你应该使用字段注入方法。


查看完整回答
反对 回复 2021-08-06
  • 1 回答
  • 0 关注
  • 405 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信