编程语言
首页 > 编程语言> > 无法在Java Android中使用dagger2在片段中注入依赖项

无法在Java Android中使用dagger2在片段中注入依赖项

作者:互联网

我能够在活动及其工作中注入依赖性.但是在片段中调用相同的依赖项不会获得访问权限.

这就是我所做的.

应用程式Java

public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector {

    @Inject
    DispatchingAndroidInjector<Activity> activityInjector;

    @Inject
    DispatchingAndroidInjector<Fragment> fragmentInjector;

    private AppComponent mComponent;

    @Override
    public void onCreate() {
    super.onCreate();
    mComponent = DaggerAppComponent.builder().application(this).build();
    mComponent.inject(this);
    }

    @Override
    public DispatchingAndroidInjector<Activity> activityInjector() {
    return activityInjector;
    }

    @Override
    public AndroidInjector<Fragment> fragmentInjector() {
    return fragmentInjector;
    }
}

这是AppComponent.Java

@Singleton
@Component(modules = { AndroidInjectionModule.class, ActivityModule.class, FragmentModule.class})
public interface AppComponent extends AndroidInjector<App> {

    void inject(App app);

    @Component.Builder
    interface Builder {
    @BindsInstance
    Builder application(Application application);
    AppComponent build();
    }
}

这是ActivityModule.Java类

@Module
public abstract class ActivityModule {
    @ContributesAndroidInjector
    abstract MainActivity contributeMainActivityInjector();

    @ContributesAndroidInjector
    abstract MyActivity contributeCampaignActivityInjector();
}

这是FragmentModule.java类

@Module
public abstract class FragmentModule {
    @ContributesAndroidInjector
    abstract MyFragment bindMyFragment();
}

现在在MyFragment类中,我想在其中注入该依赖项.在顶部,我将这些行添加到类中

@Inject
ImageDownloaderApi imageDownloaderApi;

然后检查onCreateView函数,我这样做是为了检查我的依赖项是否像这样工作

boolean injected = imageDownloaderApi == null ? false : true;
    Log.d(this.getClass().getSimpleName(), "Dependency worked: "+ String.valueOf(injected));

每次都使我感到虚假.

同样的代码在activites中起作用的地方.
我在活动中要做的另一件事是像这样在onCreate下方添加此行

  @Override
protected void onCreate(Bundle savedInstanceState) {
    AndroidInjection.inject(this);    // this line
    super.onCreate(savedInstanceState);

在尝试在片段中的onCreateView中添加同一行时

AndroidInjection.inject(this);    

它在此下方显示红线.如果我用getActivity替换它.它给了我运行时错误.

请看看并指导我错了吗?

我为片段执行的过程是否正确?因为它显然在活动中起作用.

在此先感谢您的时间.

解决方法:

我假设您正在使用支持库中的Fragment-s.尝试更改公共类App扩展MultiDexApplication实现HasActivityInjector,HasFragmentInjector到公共类App扩展MultiDexApplication实现HasActivityInjector,HasFragmentInjector,HasSupportFragmentInjector,随后提供适当的注射器.

This is an easy article使该主题更清晰.另外,此处还描述了HasSupportFragmentInjector接口的用法.

标签:android-fragments,dagger-2,dependency-injection,java,android
来源: https://codeday.me/bug/20191108/2007611.html