我正在尝试使用 Ktor 为我们的 ApiServices 构建 KMM 应用程序。我创建了一个BaseApiClass
拥有所有 api 相关代码的地方。
代码BaseApiClass
:-
class BaseAPIClass {
//Create Http Client
private val httpClient by lazy {
HttpClient {
defaultRequest {
host = ApiEndPoints.Base.url
contentType(ContentType.Application.Json)
header(CONNECTION, CLOSE)
}
install(Logging) {
logger = Logger.DEFAULT
level = LogLevel.ALL
}
install(HttpTimeout) {
requestTimeoutMillis = NETWORK_REQUEST_TIMEOUT
}
expectSuccess = false
// JSON Deserializer
install(JsonFeature) {
val json = Json {
ignoreUnknownKeys = true
coerceInputValues = true
}
serializer = KotlinxSerializer(json)
}
}
}
// Api Calling Functions I have few more similar to this but issue is random and comes in any of the api
@Throws(Exception::class)
suspend fun sampleApi(requestBody: RequestBody?) : Either<CustomException, BaseResponse<EmptyResponseModel>> {
return try {
val response = httpClient.post<BaseResponse<EmptyResponseModel>> {
url(ApiEndPoints.sample.url)
if (requestBody != null) {
body = requestBody
}
}
Success(response)
}
catch (e: Exception) {
Failure(e as CustomException)
}
}
这是我从 iOS 应用程序调用 api 的方式:-
val apiClass = BaseApiClass()
func callApi() {
apiClass.sampleApi(requestBody: .init(string: "value here")) { (result, error) in
result?.fold(failed: { (error) -> Any? in
// Error here
}, succeeded: { (result) -> Any? in
// Success here
})
}
}
现在在这里,如果我尝试用相同的object
ie调用更多类似的 api,apiClass
那么在几次调用之后它就会卡在我的函数callApi
中,它甚至不会发送 api 请求(因为我看不到控制台中打印的请求日志)并且因为我不能做任何其他操作,因为我没有从 api 得到任何东西。
一旦我更改屏幕或关闭应用程序并尝试调用相同的 api,它就会运行良好。
apiClass = BaseApiClass()
但是,如果我尝试使用它,而不是像这样只在一次创建一个对象,BaseApiClass().sampleApi(request params here) {// completion handler here}
它工作正常,我对此没有任何问题。
我不确定是什么导致这种情况发生,一切正常,Android
只有面对iOS
。