Как я могу добавить callBack к моему WS с Kotlin - PullRequest
0 голосов
/ 22 января 2020

Я разрабатываю приложение 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? Должен ли я использовать залп, если да, как я могу это сделать?

...