Java 使用Dagger 2在片段中注入依赖项时出错

Java 使用Dagger 2在片段中注入依赖项时出错,java,android,android-fragments,dependency-injection,dagger-2,Java,Android,Android Fragments,Dependency Injection,Dagger 2,我正试图使用dagger 2在我的应用程序的一个片段中注入依赖项 我有以下模块 网络模块 @Module(includes = ContextModule.class) public class NetworkModule { @Provides Cache getCacheFile(Context context) { File cacheFile = new File(context.getCacheDir(), "okhttp-cache");

我正试图使用dagger 2在我的应用程序的一个片段中注入依赖项

我有以下模块

网络模块

@Module(includes = ContextModule.class)
public class NetworkModule {

    @Provides
    Cache getCacheFile(Context context) {
        File cacheFile = new File(context.getCacheDir(), "okhttp-cache");
        return new Cache(cacheFile, 10 * 1000 * 1000);
    }

    @Provides
    HttpLoggingInterceptor getHttpLoggingInteceptor() {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        return logging;
    }

    @Provides
    OkHttp3Downloader getOkHttp3Downloader(Context context) {
        return new OkHttp3Downloader(context);
    }

    @Provides
    OkHttpClient getOkHttpClient(HttpLoggingInterceptor interceptor, Cache cache) {
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient.newBuilder().cache(cache)
                .addInterceptor(interceptor)
                .build();
        return okHttpClient;

    }

    @Provides
    Retrofit getRetrofit(OkHttpClient client, GsonConverterFactory gsonConverterFactory, RxJava2CallAdapterFactory callAdapter) {
        return new Retrofit.Builder()
                .addConverterFactory(gsonConverterFactory)
                .addCallAdapterFactory(callAdapter)
                .baseUrl("https://api.themoviedb.org/3/")
                .client(client)
                .build();
    }

    @Provides
    GsonConverterFactory getGsonConverterFactory() {
        return GsonConverterFactory.create();
    }

    @Provides
    RxJava2CallAdapterFactory getRxJavaFactory() {
        return RxJava2CallAdapterFactory.create();
    }

}
@Module
public abstract class ActivityBuilder {

    @ContributesAndroidInjector
    abstract NewsListActivity bindMoviesListActivity();

    @ContributesAndroidInjector(modules = NewsListFragmentModule.class)
    abstract NewsListFragment bindNewsListFragment();
}
活动生成器模块

@Module(includes = ContextModule.class)
public class NetworkModule {

    @Provides
    Cache getCacheFile(Context context) {
        File cacheFile = new File(context.getCacheDir(), "okhttp-cache");
        return new Cache(cacheFile, 10 * 1000 * 1000);
    }

    @Provides
    HttpLoggingInterceptor getHttpLoggingInteceptor() {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        return logging;
    }

    @Provides
    OkHttp3Downloader getOkHttp3Downloader(Context context) {
        return new OkHttp3Downloader(context);
    }

    @Provides
    OkHttpClient getOkHttpClient(HttpLoggingInterceptor interceptor, Cache cache) {
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient.newBuilder().cache(cache)
                .addInterceptor(interceptor)
                .build();
        return okHttpClient;

    }

    @Provides
    Retrofit getRetrofit(OkHttpClient client, GsonConverterFactory gsonConverterFactory, RxJava2CallAdapterFactory callAdapter) {
        return new Retrofit.Builder()
                .addConverterFactory(gsonConverterFactory)
                .addCallAdapterFactory(callAdapter)
                .baseUrl("https://api.themoviedb.org/3/")
                .client(client)
                .build();
    }

    @Provides
    GsonConverterFactory getGsonConverterFactory() {
        return GsonConverterFactory.create();
    }

    @Provides
    RxJava2CallAdapterFactory getRxJavaFactory() {
        return RxJava2CallAdapterFactory.create();
    }

}
@Module
public abstract class ActivityBuilder {

    @ContributesAndroidInjector
    abstract NewsListActivity bindMoviesListActivity();

    @ContributesAndroidInjector(modules = NewsListFragmentModule.class)
    abstract NewsListFragment bindNewsListFragment();
}
这是AppComponent

@Component(modules = {AndroidSupportInjectionModule.class, ContextModule.class, ActivityBuilder.class})
public interface AppComponent {

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);

        AppComponent build();

    }

    void inject(NewsApp app);

}
这是嵌入片段的我的活动类

class NewsListActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, HasSupportFragmentInjector {

    @Inject
    lateinit var mAndroidInjector: AndroidInjector<Fragment>

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_news_list)
        setSupportActionBar(toolbar)

        val toggle = ActionBarDrawerToggle(
                this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        drawer_layout.addDrawerListener(toggle)
        toggle.syncState()

        nav_view.setNavigationItemSelectedListener(this)

        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                    .add(R.id.frame_main, NewsListFragment(), "news-list-fragment")
                    .commit()
        }

    }

    override fun supportFragmentInjector(): AndroidInjector<Fragment> {
        return mAndroidInjector
    }

}
我学习了许多不同的教程,以了解如何在片段中使用新的AndroidInjection,所以我没有这些教程的链接

我做错什么了吗

错误

e: /Users/sriramr/Desktop/android/NewsApp/app/src/main/java/in/sriram/newsapp/di/AppComponent.java:12: error: [dagger.android.AndroidInjector.inject(T)] dagger.android.AndroidInjector<android.support.v4.app.Fragment> cannot be provided without an @Provides- or @Produces-annotated method.
public interface AppComponent {
       ^
      dagger.android.AndroidInjector<android.support.v4.app.Fragment> is injected at
          in.sriram.newsapp.ui.newslist.NewsListActivity.mAndroidInjector
      in.sriram.newsapp.ui.newslist.NewsListActivity is injected at
          dagger.android.AndroidInjector.inject(arg0)
e:/Users/sriramr/Desktop/android/NewsApp/app/src/main/java/in/sriram/NewsApp/di/AppComponent.java:12:错误:[dagger.android.androidjector.inject(T)]dagger.android.androidjector在没有@Provides-或@products注释方法的情况下无法提供。
公共接口应用组件{
^
dagger.android.android注射器在
in.sriram.newsapp.ui.newslist.NewsListActivity.mAndroidInjector
in.sriram.newsapp.ui.newslist.NewsListActivity在
dagger.android.AndroidInjector.inject(arg0)

尝试在
新闻列表活动中更改以下内容

AndroidInjector<Fragment>
AndroidInjector
致:

dispatchingandroid
此外,您还没有发布应用程序类。请确保它包含以下内容:

class NewsApp : Application(), HasActivityInjector {

    @Inject
    lateinit var activityDispatchingAndroidInjector: DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()

        DaggerAppComponent.builder()
            .application(this)
            .build()
            .inject(this)
        // some other initialization
    }

    fun activityInjector(): AndroidInjector<Activity>? {
        return activityDispatchingAndroidInjector
    }
}
class NewsApp:Application(),HasActivityInjector{
@注入
lateinit var Activity DispatchingAndroidInjector:DispatchingAndroidInjector
重写fun onCreate(){
super.onCreate()
DaggerAppComponent.builder()
.申请书(本)
.build()
.注入(这个)
//其他一些初始化
}
趣味活动注射器():雄激素注射器{
返回活动DispatchingAndRoid Injector
}
}

该错误提示依赖项被注入了两次,但其范围有限。希望我能更好地帮助您,但我没有使用这些新的奇特注释。您也可以在此处找到有关此错误的一些一般信息:[无法提供如何修复]