как получить заголовок с Retrofit2 и RxJava2 - PullRequest
0 голосов
/ 14 июня 2019

У меня есть API, мне нужно вытащить информацию из заголовка и сделать еще один вызов. Я пробовал несколько подходов, но, похоже, не могу получить только заголовки. Другого ответа нет.

Я пытался заставить его возвращать различные объекты Response, такие как заголовки okhttp3, заголовки Retrofit, HttpHeaders и т. Д., Но получал EOF с первого символа.

апи:

@POST("api/booking/search")
fun bookFlight(@Body bookFlightDetails: BookFlightDetails): Observable<Response<Headers>>

класс менеджера:

class DataManager(context: AllegiantApplication, private val mApi: RxRestServices) {

fun bookFlight(bookingDetails: BookFlightDetails) : Observable<Response<Headers>>? {
    return mApi.bookFlight(bookingDetails)
}

И получаю его с моим репо:

 fun bookFlight(bookingDetails: BookFlightDetails) {
    mDataManager.bookFlight(bookingDetails)
            ?.subscribeOn(Schedulers.io())
            ?.observeOn(AndroidSchedulers.mainThread())
            ?.subscribe({
                processHeader(it)
            }, {
                error ->  Log.d("TAG",  error.localizedMessage)  // <- EOF at 1st char
            }
            )
}

Может кто-нибудь сказать мне, как мне нужно структурировать свои вызовы API, чтобы получить только заголовок?

1 Ответ

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

второй раз за месяц я ответил на свой вопрос.

Этот был двойным. 1) получить правильный тип ответа. Я пошел с

Observable<Response<ResponseBody>>

и это позволило мне увидеть заголовок. Тем не менее, вторая часть заключалась в том, что я потреблял его перед тем, как передать его в processHeader. Я давал processHeader it, который потреблял ответ. Я изменил способ подписки на:

  processHeader(it)

до:

  val headers = it?.headers()
  processHeader(headers)

поэтому processHeaders видит только заголовок, ответ может быть "использован" в обычном режиме

...