大佬教程收集整理的这篇文章主要介绍了Android Hilt 使用两个 Retrofit2 客户端,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想用 Dagger Hilt 设置两个 Retrofit2 客户端,因为我的应用程序从两个不同的 API 获取信息。但是当我运行我的代码时抛出以下异常 ->
App_HiltComponents.java:128: error: [Dagger/DuplicateBindings] retrofit2.Retrofit is bound multiple times:
public abstract static class SingletonC implements HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint,^
@org.jetbrains.Annotations.NotNull @ProvIDes retrofit2.Retrofit de.kotlinbooks.di.NetworkBooksModule.retrofitBooks(okhttp3.okhttpClIEnt)
@org.jetbrains.Annotations.NotNull @ProvIDes retrofit2.Retrofit de.kotlinbooks.di.NetworkNYTModule.retrofitNYT(okhttp3.okhttpClIEnt)
我知道改造客户端是一个单例,所以我将我的模块分成两个文件,用于不同的 API。这是我的代码 ->
网络图书模块
@module
@Installin(SingletonComponent::class)
class NetworkBooksModule {
@ProvIDes
fun okhttpClIEnt(): OkhttpClIEnt {
val levelType: httpLoggingInterceptor.Level = if (BuildConfig.DEBUG)
httpLoggingInterceptor.Level.bODY else httpLoggingInterceptor.Level.NONE
val logging = httpLoggingInterceptor()
logging.setLevel(levelTypE)
return OkhttpClIEnt.builder()
.addInterceptor(logging)
.build()
}
@ProvIDes
fun retrofitBooks(okhttpClIEnt: OkhttpClIEnt): Retrofit {
return Retrofit.builder()
.baseUrl("https://www.GoogleAPIs.com/books/v1/")
.clIEnt(okhttpClIEnt)
.addConverterFactory(moshiConverterFactory.create())
.build()
}
@ProvIDes
fun bookservice(retrofit: Retrofit): Bookservice {
return retrofit.create(Bookservice::class.java)
}
@ProvIDes
fun bookClIEnt(bookservice: BookservicE): BookClIEnt {
return BookClIEnt(bookservicE)
}
}
NetworkNYTModule
@module
@Installin(SingletonComponent::class)
class NetworkNYTModule {
@ProvIDes
fun okhttpClIEnt(): OkhttpClIEnt {
val levelType: httpLoggingInterceptor.Level = if (BuildConfig.DEBUG)
httpLoggingInterceptor.Level.bODY else httpLoggingInterceptor.Level.NONE
val logging = httpLoggingInterceptor()
logging.setLevel(levelTypE)
return OkhttpClIEnt.builder()
.addInterceptor(logging)
.build()
}
@ProvIDes
fun retrofitNYT(okhttpClIEnt: OkhttpClIEnt): Retrofit {
return Retrofit.builder()
.baseUrl("https://API.nytimes.com/svc/books/v3/")
.clIEnt(okhttpClIEnt)
.addConverterFactory(moshiConverterFactory.create())
.build()
}
@ProvIDes
fun nytservice(retrofit: Retrofit): NYTservice {
return retrofit.create(NYTservice::class.java)
}
@ProvIDes
fun nytClIEnt(nytservice: NYTservicE): NYTClIEnt {
return NYTClIEnt(nytservicE)
}
}
您可以使用界面来提供改造而不是改造本身
@module
@InstallIn(SingletonComponent::class)
class NetworModule {
@Provides
fun retrofitNYT(okhttpClient: OkhttpClient): NYTservice{
return Retrofit.builder()
.baseUrl("https://api.nytimes.com/svc/books/v3/")
.client(okhttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(NYTservice::class.java)
}
@Provides
fun retrofitBooks(okhttpClient: OkhttpClient): Bookservice{
return Retrofit.builder()
.baseUrl("https://www.googleapis.com/books/v1/")
.client(okhttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(Bookservice::class.java)
}
}
以上是大佬教程为你收集整理的Android Hilt 使用两个 Retrofit2 客户端全部内容,希望文章能够帮你解决Android Hilt 使用两个 Retrofit2 客户端所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。