错误:[Dagger/MissingBinding]

我想用一个主要活动和多个片段制作一个简单的项目。在这里,我在一个活动中有两个片段,我想将演示者注入登录片段,但它不起作用。我的错误在哪里?


主应用程序


public class MainApplication extends DaggerApplication{



private static ApplicationComponent component;

@Override

public 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;

  }



}

主活动.java


public class MainActivity extends DaggerAppCompatActivity  {




private Fragment[] mFragments = new Fragment[2];

private int curIndex;


@Inject

HomeFragment homeFragment;


@Inject

LoginFragment loginFragment;


@Override

protected 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);

}


@Override

public 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.Builder

interface Builder {


    ApplicationComponent build();


    @BindsInstance

    Builder application(MainApplication application);

}

}


慕尼黑的夜晚无繁华
浏览 406回答 1
1回答

慕标琳琳

你使用@inject 来注解 LoginFragment 的构造函数,当一个新的实例被请求时,Dagger 构造你的 LoginFragment 类的实例并满足它们的依赖关系(比如 mPresenter 字段)。因为 MainActivitySubcomponent 不访问 LoginFragmentModule,所以 Dagger 给你一个错误,不能提供 LoginContract.Presenter。而不是使用构造函数注入,如果您使用另一种方式为 MainActivity 提供 LoginFragment,则问题将得到解决。您应该从 LoginFragment 构造函数中删除 @inject 并创建一个模块来提供它,如下例所示:@Modulepublic class MainModule {&nbsp; &nbsp; @Provides&nbsp; &nbsp; public static LoginFragment provideLoginFragment() {&nbsp; &nbsp; &nbsp; &nbsp; return LoginFragment.newInstance("param1", "param2");&nbsp; &nbsp; }}Dagger 提示:不要对系统实例化的对象使用构造函数注入。在android中,为了在activity和fragment中注入依赖,你应该使用字段注入方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java