Dav*_*vid 4 android kotlin retrofit dagger-2
我在一个项目中工作,我需要用 Dagger 2 注入 Retrofit 对象。我搜索了信息,但我只能执行几个步骤,现在我不知道如何继续:
我的组件:
@Singleton
@Component(modules = arrayOf(NetworkModule::class))
interface NetworkComponent {
fun inject(foo: TheApplication)
}
Run Code Online (Sandbox Code Playgroud)
我的模块:
@Module
class NetworkModule {
@Provides
@Singleton
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.chucknorris.io/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
}
Run Code Online (Sandbox Code Playgroud)
现在我看到我必须创建一个Classwho 扩展自Applicationfor initComponent并创建一个@Inject下一个:
class TheApplication: Application() {
override fun onCreate() {
super.onCreate()
val net: NetworkModule = Dagger...
}
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,当我把Dagger...它放在应该是DaggerNetworkComponent但我重建项目时仍然丢失。任何人都可以向我解释它的Application.class用途以及我如何继续?
尝试这个
应用组件.kt
@Component(modules = [NetworkModule::class])
@Singleton
interface AppComponent {
fun inject(app: MyApp)
}
Run Code Online (Sandbox Code Playgroud)
网络模块.kt
@Module
class NetworkModule {
@Singleton
@Provides
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("YOUR_BASE_URL")
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
@Singleton
@Provides
fun provideApi(retrofit: Retrofit): WebApi {
return retrofit.create(WebApi::class.java)
}
@Singleton
@Provides
fun provideOkHttpClient(
interceptors: ArrayList<Interceptor>
): OkHttpClient {
val clientBuilder = OkHttpClient.Builder()
.followRedirects(false)
interceptors.forEach {
clientBuilder.addInterceptor(it)
}
return clientBuilder.build()
}
@Singleton
@Provides
fun provideInterceptors(): ArrayList<Interceptor> {
val interceptors = arrayListOf<Interceptor>()
val loggingInterceptor = HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG) {
HttpLoggingInterceptor.Level.BODY
} else {
HttpLoggingInterceptor.Level.NONE
}
}
interceptors.add(loggingInterceptor)
return interceptors
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序
class MyApp : Application() {
companion object {
lateinit var instance: MyApp
private set
}
lateinit var appComponent: AppComponent
private set
override fun onCreate() {
super.onCreate()
instance = this
initComponent()
}
private fun initComponent() {
appComponent = DaggerAppComponent.builder()
.build()
appComponent.inject(this)
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml
<application
android:name=".MyApp"
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |