【问题标题】:how to fetch header with Retrofit2 and RxJava2如何使用 Retrofit2 和 RxJava2 获取标头
【发布时间】:2019-06-17 21:57:11
【问题描述】:

我有一个 API,我需要从标头中提取信息并进行另一个调用。我尝试了多种方法,但似乎无法仅获取标题。没有其他回应。

我尝试过让它返回各种响应对象,例如 okhttp3 标头、Retrofit 标头、HttpHeaders 等,但在第一个字符时获得了 EOF。

api:

@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)
}

并使用我的 repo 获取它:

 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 调用以获取标头?

【问题讨论】:

标签: android retrofit2 rx-java2


【解决方案1】:

这个月我第二次回答了我自己的问题。

这是双重的。 1)获得正确的响应类型。我去了

Observable<Response<ResponseBody>>

这让我看到了标题。但是,第二部分是我在将它发送到 processHeader 之前使用它。我给 processHeader it 消耗了响应。我将订阅方法更改为:

  processHeader(it)

到:

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

所以 processHeaders 只看到响应可以正常“消费”的标头

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多