Я разрабатываю приложение android с Kotlin, api 28. Я также использую swaggerHub и swagger. json, чтобы получить все WS. В swaggerHub я экспортирую клиент sdk Kotlin. После экспорта файла «Kotlin_client_generated» с помощью swagger и добавляю его в мой проект. Вот пример кода ws, среди прочего ws:
class MobileApi(basePath: kotlin.String = "http://url...") : ApiClient(basePath) {
@Suppress("UNCHECKED_CAST")
fun apiMobileAddressAllGet() : kotlin.Array<AddressData> {
val localVariableBody: kotlin.Any? = null
val localVariableQuery: MultiValueMap = mapOf()
val contentHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf()
val acceptsHeaders: kotlin.collections.Map<kotlin.String,kotlin.String> = mapOf("Accept" to "application/json")
val localVariableHeaders: kotlin.collections.MutableMap<kotlin.String,kotlin.String> = mutableMapOf()
localVariableHeaders.putAll(contentHeaders)
localVariableHeaders.putAll(acceptsHeaders)
val localVariableConfig = RequestConfig(
RequestMethod.GET,
"/.../Address/All",
query = localVariableQuery,
headers = localVariableHeaders
)
val response = request<kotlin.Array<AddressData>>(
localVariableConfig,
localVariableBody
)
return when (response.responseType) {
ResponseType.Success -> (response as Success<*>).data as kotlin.Array<AddressData>
ResponseType.Informational -> TODO()
ResponseType.Redirection -> TODO()
ResponseType.ClientError -> throw ClientException((response as ClientError<*>).body as? String ?: "Client error")
ResponseType.ServerError -> throw ServerException((response as ServerError<*>).message ?: "Server error")
else -> throw kotlin.IllegalStateException("Undefined ResponseType.")
}
Через некоторое время исследования о том, как использовать этот WS, я обнаружил, что должен использовать сопрограмму, и я использую GlobalScope с диспетчерами, но это решение не дало мне CallBack для этого WS, я не знаю, если ответ вернет успех или ошибку:
GlobalScope.launch(Dispatchers.Default) {
val address = mobileApi!!.apiMobileAddressAllGet()
withContext(Dispatchers.Main) {
recyclerViewAddressList.apply {
recyclerViewAddressList.layoutManager = LinearLayoutManager(this@AddressActivity, RecyclerView.HORIZONTAL, false)
recyclerViewAddressList.adapter = AddressItemAdapter(address, this@AddressActivity,this@AddressActivity)
}
}
}
Я хотел бы знать, как я могу добавить callBack к моему WS? Должен ли я использовать залп, если да, как я могу это сделать?