android retrofit添加编码,android - 使用Retrofit 2.0和RxJ获取响应状态代码

而不是像你一样声明API调用:

Observable apiCall(@Body body);

您也可以这样声明:

Observable> apiCall(@Body body);

然后,您将拥有如下所示的订阅者:

new Subscriber>() {

@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 startupResponseResponse) {

Timber.d("onNext: %s", startupResponseResponse.code());

// HTTP errors, e. g. 404, will end up here!

}

}

因此,带有错误代码的服务器响应也将发送到onNext,您可以通过致电reponse.code()获取代码。

[http://square.github.io/retrofit/2.x/retrofit/retrofit/Response.html]

编辑:好的,我终于开始研究e-nouri在评论中所说的内容,即只有2xx代码将发送到onNext.原来我们都是对的:

如果调用声明如下:

Observable> apiCall(@Body body);

甚至这个

Observable> apiCall(@Body body);

无论错误代码如何,所有回复都将以onNext结尾。 这是可能的,因为Retrofit将所有内容包装在onNext对象中。

另一方面,如果调用声明如下:

Observable apiCall(@Body body);

或这个

Observable apiCall(@Body body);

事实上只有2xx的回复将转到onNext.其他所有内容都将包含在HttpException中并发送至onError.这也是有道理的,因为如果没有Response包装,应该向onNext发出什么? 鉴于请求不成功,唯一明智的发射方式是null ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值