如何像这样注入网络模块?
How to inject Network module like this?
我想不出如何注入网络module.I尝试并找到很多方法在匕首中注入网络模块2.But我无法解决this.Please帮助我。
abstract class BaseRepository protected constructor() {
init {
val logger = HttpLoggingInterceptor()
logger.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(logger)
.build()
val retrofit = Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(Gson()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build()
mTheApi = retrofit.create<AttendanceApi>(AttendanceApi::class.java)
}
}
我试过这个模块,但没用。
class NetworkModule {
companion object {
private const val NAME_BASE_URL = "NAME_BASE_URL"
}
@Provides
@Named(NAME_BASE_URL)
fun provideBaseUrlString()=
"http://attendance.saltcloudserver.com/api/"
@Provides
@Singleton
fun provideHttpClient()=OkHttpClient()
@Provides
@Singleton
fun provideRetrofit(interceptor: HttpLoggingInterceptor): OkHttpClient {
return OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.build()
}
}
我期待输出,但我无法注入它。
要使 dagger 识别,您需要指定它是 Module
。为此,您需要向 class 添加 @Module
注释,我发现您当前的实现中缺少该注释。
@Module
class NetworkModule {
companion object {
private const val NAME_BASE_URL = "NAME_BASE_URL"
}
@Provides
@Named(NAME_BASE_URL)
fun provideBaseUrlString()=
"http://attendance.saltcloudserver.com/api/"
@Provides
@Singleton
fun provideHttpClient()=OkHttpClient()
@Provides
@Singleton
fun provideRetrofit(interceptor: HttpLoggingInterceptor): OkHttpClient {
return OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.build()
}
}
我想不出如何注入网络module.I尝试并找到很多方法在匕首中注入网络模块2.But我无法解决this.Please帮助我。
abstract class BaseRepository protected constructor() {
init {
val logger = HttpLoggingInterceptor()
logger.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(logger)
.build()
val retrofit = Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(Gson()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build()
mTheApi = retrofit.create<AttendanceApi>(AttendanceApi::class.java)
}
}
我试过这个模块,但没用。
class NetworkModule {
companion object {
private const val NAME_BASE_URL = "NAME_BASE_URL"
}
@Provides
@Named(NAME_BASE_URL)
fun provideBaseUrlString()=
"http://attendance.saltcloudserver.com/api/"
@Provides
@Singleton
fun provideHttpClient()=OkHttpClient()
@Provides
@Singleton
fun provideRetrofit(interceptor: HttpLoggingInterceptor): OkHttpClient {
return OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.build()
}
}
我期待输出,但我无法注入它。
要使 dagger 识别,您需要指定它是 Module
。为此,您需要向 class 添加 @Module
注释,我发现您当前的实现中缺少该注释。
@Module
class NetworkModule {
companion object {
private const val NAME_BASE_URL = "NAME_BASE_URL"
}
@Provides
@Named(NAME_BASE_URL)
fun provideBaseUrlString()=
"http://attendance.saltcloudserver.com/api/"
@Provides
@Singleton
fun provideHttpClient()=OkHttpClient()
@Provides
@Singleton
fun provideRetrofit(interceptor: HttpLoggingInterceptor): OkHttpClient {
return OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.addInterceptor(interceptor)
.build()
}
}