Java 使用Dagger 2在片段中注入依赖项时出错
我正试图使用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");
@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
}
}
该错误提示依赖项被注入了两次,但其范围有限。希望我能更好地帮助您,但我没有使用这些新的奇特注释。您也可以在此处找到有关此错误的一些一般信息:[无法提供如何修复]