取消Android - Retrofit - Using模块中所有先前的Api调用



我已经创建了下面的模块在我的android应用程序。

val appNetworkModule = module {
// Dependency: OkHttpClient
single {
var okHttpClient=OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(get<Interceptor>("LOGGING_INTERCEPTOR"))
.addInterceptor(get<Interceptor>("OK_HTTP_INTERCEPTOR"))
.build()
}
}

现在,我必须清除所有以前的api调用,同时从应用程序注销。因此,我需要访问这里使用的变量,如上所述,名为:okHttpClient

我试图访问它如下取消所有以前的api调用在我的主要活动:

appNetworkModule.okHttpClient.dispatcher.cancelAll()

但是,okHttpClient不可访问.

可能是什么问题?

我可能在这里晚了,但正确的答案是,因为它是在模块中定义的(前提是您使用koin作为DI库)。我们需要使用构造函数注入或字段注入将它注入到所需的类中(我们需要调用okHttpClient)。所以我们的代码是这样的

使用构造注入:确保您的类TestClass获得注入okHttpClient,例如在模块中定义TestClasssingle { TestClass(get()) }

class TestClass(private val okHttpClient: OkHttpClient) {
fun clearAllApis(){
okHttpClient.dispatcher.cancelAll()
}
}

使用字段注入:如果您需要使用字段注入而不是

class TestClass {
private val okHttpClient : OkHttpClient by inject() //If it is extended from Android platform class like AppCompatActivity, Fragment etc. or a KoinComponent extended class
private val okHttpClient : OkHttpClient by inject(OkHttpClient::class.java) //Otherwise
fun clearAllApis(){
okHttpClient.dispatcher.cancelAll()
}
}

确保.inject()来自org.koin.android.ext.android.inject

最新更新