You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何在Retrofit结合RxJava时获取HTTPS状态码?

如何在Retrofit+RxJava中获取HTTPS响应状态码

嘿,我来帮你搞定这个问题!你现在的困扰在于,当前的Observable直接返回了解析后的ResponseData实体类——这是Retrofit帮你自动把响应体转换成了业务对象,所以拿不到响应状态码、请求头这些元数据。要解决这个问题,只需要调整一下ApiService的返回类型,让它返回Retrofit提供的Response包装类就行,这样就能拿到完整的响应信息了。

具体操作步骤:

  1. 修改ApiService的方法返回类型
    把原来返回Observable<ResponseData>的方法,改成返回Observable<Response<ResponseData>>。Response是Retrofit自带的类,它会包裹你的业务实体类,同时包含HTTP状态码、响应头、响应体等所有请求相关信息。

  2. 调整订阅时的泛型匹配
    对应的,DisposableObserver的泛型也要同步改成Response<ResponseData>,这样在onNext回调里就能拿到完整的响应对象了。

  3. 在onNext中获取状态码和业务数据
    拿到Response对象后,你可以通过response.code()直接获取HTTP状态码,用response.body()获取原来的ResponseData实体内容。

修改后的完整代码示例:

progressDialog.show();
Observable<Response<ResponseData>> observable = apiService.getData();
compositeDisposable.add(observable
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new DisposableObserver<Response<ResponseData>>() {
            @Override
            public void onNext(Response<ResponseData> response) {
                // 获取HTTP响应状态码
                int statusCode = response.code();
                Log.e("pppp", "onNext: 状态码 = " + statusCode);
                
                // 获取解析后的业务实体数据
                ResponseData responseData = response.body();
                if (responseData != null) {
                    Log.e("pppp", "onNext: 响应数据 = " + responseData.toString());
                }
            }

            @Override
            public void onError(Throwable e) {
                progressDialog.dismiss();
                Log.e("pppp", "onError: " + e.getMessage());
            }

            @Override
            public void onComplete() {
                progressDialog.dismiss();
                Log.e("pppp", "onComplete");
            }
        })
);

额外小提示:

  • Retrofit默认会把4xx、5xx这类错误状态码的请求抛到onError回调里,而不会进入onNext。如果你想让所有状态码都进入onNext处理,可以在构建Retrofit时配置相关规则,或者在onNext里用response.isSuccessful()判断请求是否成功(该方法会返回code >= 200 && code < 300的判断结果)。

内容的提问来源于stack exchange,提问作者Vichit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 08:52:34