如何使用rxjava在retrofit 2.0中获取请求URL?

何福毅*_*何福毅 23 android rx-java retrofit2

我正在尝试升级到Retrofit 2.0并在我的android项目中添加RxJava.我正在进行api调用,并想要将sqlite中的响应数据作为缓存来检索url和它

Observable<MyResponseObject> apiCall(@Body body);
Run Code Online (Sandbox Code Playgroud)

并在RxJava调用中:

myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onNext(MyResponseObject myResponseObject) {

    }
});
Run Code Online (Sandbox Code Playgroud)

在Retrofit 1.9中,我们可以获得成功回调中的url:

        @Override
        public void success(MyResponseObject object, Response response) {
            String url=response.getUrl();
            //save object data and url to sqlite
        }
Run Code Online (Sandbox Code Playgroud)

如何使用RxJava进行Retrofit 2.0?

Lor*_*nMK 34

更新:

再次阅读问题后:

如果要访问原始响应,则需要将API接口定义为:

Observable<Response<MyResponseObject>> apiCall(@Body body);
Run Code Online (Sandbox Code Playgroud)

代替:

Observable<MyResponseObject> apiCall(@Body body);
Run Code Online (Sandbox Code Playgroud)

您可以使用以下网址获取网址:

response.raw().request().url()
Run Code Online (Sandbox Code Playgroud)

这里:
response来自Retrofit
raw的响应是来自OkHttp的响应是来自OkHttp
request的请求,其中包含Urlas HttpUrl.

  • 它在retrofit1.9中很有用,但是在retrofit2.0和rxjava中我无法从改造中检索响应 (6认同)
  • @LordRaydenMK,我们能否在获得响应之前打印请求的URL?因为我们可以在不使用Rxjava的情况下打印它,例如/sf/ask/2557259141/ (3认同)