处理 Retrofit 2 RX 中的错误
Handle errors in Retrofit 2 RX
我的请求应该得到 POJO 的 JSON 或 JSON 描述的错误(可能是无效的请求字段、服务器问题等)。
但是订阅者中的改造只给我 Throwable。怎么才能查出是网络错误,什么是http代码,得到JSON有错误?
private class ProjectListSubscriber extends Subscriber<ProjectListResponse> {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
//is that a network? http code? convert json to error POJO?
}
@Override
public void onNext(ProjectListResponse projectListResponse) {
updateProjectList(projectListResponse.getProjectList());
}
}
由于您使用的是 RxJava,因此在出现网络错误时会调用 onError
,并且与端点相关的错误是 Response
的一部分。
如果出错,检查 throwable 是否是 HttpException
的实例
public void onError(Throwable e) {
if (e instanceof HttpException) {
如果检查为真,则说明您的请求有误。将 throwable 转换为 HttpException
,并且访问是成员。例如。
((HttpException) e).response().errorBody()
如果检查结果为 false
那么您遇到了与网络相关的错误。
我的请求应该得到 POJO 的 JSON 或 JSON 描述的错误(可能是无效的请求字段、服务器问题等)。
但是订阅者中的改造只给我 Throwable。怎么才能查出是网络错误,什么是http代码,得到JSON有错误?
private class ProjectListSubscriber extends Subscriber<ProjectListResponse> {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
//is that a network? http code? convert json to error POJO?
}
@Override
public void onNext(ProjectListResponse projectListResponse) {
updateProjectList(projectListResponse.getProjectList());
}
}
由于您使用的是 RxJava,因此在出现网络错误时会调用 onError
,并且与端点相关的错误是 Response
的一部分。
如果出错,检查 throwable 是否是 HttpException
public void onError(Throwable e) {
if (e instanceof HttpException) {
如果检查为真,则说明您的请求有误。将 throwable 转换为 HttpException
,并且访问是成员。例如。
((HttpException) e).response().errorBody()
如果检查结果为 false
那么您遇到了与网络相关的错误。