当前位置: 首页 > 知识库问答 >
问题:

使用Retrofit 2.0和RxJava获取响应状态代码

宗涵蓄
2023-03-14
Observable<MyResponseObject> apiCall(@Body body);
myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(MyResponseObject myResponseObject) {
           //On response from server
        }
    });

在改版1.9中,RetrofitError仍然存在,我们可以通过以下操作获得状态:

error.getResponse().getStatus()

您如何使用RXJava在Registfit2.0中做到这一点?

共有1个答案

万乐逸
2023-03-14

而不是像您那样声明API调用:

Observable<MyResponseObject> apiCall(@Body body);

您也可以这样声明:

Observable<Response<MyResponseObject>> apiCall(@Body body);

然后,您将拥有如下所示的订阅服务器:

new Subscriber<Response<StartupResponse>>() {
    @Override
    public void onCompleted() {}

    @Override
    public void onError(Throwable e) {
        Timber.e(e, "onError: %", e.toString());

        // network errors, e. g. UnknownHostException, will end up here
    }

    @Override
    public void onNext(Response<StartupResponse> startupResponseResponse) {
        Timber.d("onNext: %s", startupResponseResponse.code());

        // HTTP errors, e. g. 404, will end up here!
    }
}
Observable<Response<MyResponseObject>> apiCall(@Body body);

甚至这个

Observable<Response<ResponseBody>> apiCall(@Body body);

所有响应都将在下一个中结束,而不管它们的错误代码是什么。这是可能的,因为所有内容都通过翻新包装在response对象中。

另一方面,如果调用是这样声明的:

Observable<MyResponseObject> apiCall(@Body body);
Observable<ResponseBody> apiCall(@Body body);
 类似资料:
  • 如何从的结果中获取HTTP状态?

  • 我正在尝试创建一个登录表单。当我用Postman测试服务时,我会得到一个带有状态代码等的body对象。 但是,使用JavaScript fetch,我无法获取body对象,并且我刚刚收到一个错误: 我需要在Fetch中获取状态代码。

  • 我正在使用apache的HttpClient(通过Fluent API)。当我获得响应对象时,我首先执行以下操作: 如果状态代码为4xx或5xx,我将抛出异常,或者返回内容: 这里是类型为的对象。但当我运行此程序时,我得到: 我怎样才能避开这件事?

  • 问题内容: 调用JAX-WS端点时,如何获取HTTP响应代码? 在下面的示例代码中,在调用Web服务时可能会引发Exception,例如或。 在这种情况下,如何从HTTP响应中获取HTTP状态代码? 问题答案: 完成@Praveen答案后,您必须将变成原始值,然后从上下文中获取值。 如果您在托管的Web服务客户端中发生异常,请不要忘记将事务标记为回滚。

  • 我希望检索HTTP响应状态代码(例如,400、401、403、503等),以防请求失败(理想情况下也是成功)。在这段代码中,我使用HTTP Basic执行用户身份验证,并希望能够在用户错误键入密码时向用户发送身份验证失败的消息。 不幸的是,产生的错误似乎并不表示实际收到了HTTP状态代码409: 此外,在发生错误时检索HTTP正文会很好,因为我的服务器端将在那里放置错误的文本描述。 问题 是否可以

  • 根据节点获取文档节点获取 我们可以这样得到响应状态 为了得到数据 我有一个场景,需要从响应返回JSON数据和状态。我试着这样用 但是 安慰日志(jsonData.status) 不会返回状态。如何获取状态和输出数据