Как получить статус ответа в Retrofit (Kotlin)? - PullRequest
1 голос
/ 18 июня 2019

Я использую Retrofit. Использование Kotlin. Мне нужно знать код статуса резонанса. Как это 200 или 500. Как я могу получить его из ответа?

Мой класс API:

interface Api {
    @POST("user/code/check")
    fun checkSmsCode(@Body body: CheckCodeBody): Single<Response<Void>> }

Вот как я называю Api. Но учтите, что SERVE НЕ ВОЗВРАЩАЕТ ПОЛЕ КОДА В ОРГАНЕ ОТВЕТА!

api.checkSmsCode(
   CheckCodeBody(
       code = code
   )
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({         
      //HOW TO CHECK STATUS RESPONSE STATUS CODE HERE???
    }, 
    { e ->
        when (e) {
            is IOException -> view?.showNoNetworkAlert()
            else -> view?.invalidCodeError()
        }
     }
).also {}

Как я понял, в Java это было легко и просто.

Вы просто используете response.code() или что-то подобное, и все. Но как этого добиться в Котлине?

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

Если вы не настроили свой метод запроса на модификацию для возврата Response<*>, вы не сможете получить код ответа. Пример:

interface SomeApi{
 @POST("user/code/check")
fun checkSmsCode(@Body body: CheckCodeBody): Single<Response<String>> 
}

И после того, как вы закончите свой запрос:

.subscribe({
 //access response code here like : it.code()
 //and you can access the response.body() for your data
 //also you can ask if that response.isSuccessful
})
0 голосов
/ 18 июня 2019

лет нужно использовать

interface OnlineStoreService{

    @Headers("Content-Type: application/json","Connection: close")
    @POST
    fun getDevices(
            @Url url: String,
            @Header("Authorization") token: String,
            @Body apiParams: APIParams
    ): Observable<OnlineStoresInfo>

} 


.subscribe({ onlineStoresInfo ->   // or it -> where "it" it's your object response, in this case is my class OnlineStoresInfo

                    loading.value = false
                    devices.value = onlineStoresInfo.devices

                }, { throwable ->
                    Log.e(this.javaClass.simpleName, "Error getDevices ", throwable)
                    loading.value = false
                    error.value = context.getString(R.string.error_information_default_html)
                })

.subscribe({ it -> 
// code
}, { throwable ->
 //code
})
0 голосов
/ 18 июня 2019

так что ваш ответ должен выглядеть примерно так

      override fun onResponse(call: Call<MyModel>?, response: Response<MyModel>?) {
           //
      }
 })

тогда внутри, что вы должны просто сделать

      override fun onResponse(call: Call<MyModel>?, response: Response<MyModel>?) {
           response.code()
      }
 })

это то, о чем вы говорите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...