Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
516 views
in Technique[技术] by (71.8m points)

android - Handle errors in Retrofit 2 RX

My request should get either JSON for POJO or JSON described error(can be invalid request fields, server problems and so on).

But retrofit in subscriber gives me only Throwable. How can I find out is that a network error, what is http code, and get JSON with error?

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());
    }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Since you are using RxJava, onError is called in case of network errors and endpoints related error are part of the Response. In case of error, check if the throwable is an instance of HttpException

public void onError(Throwable e) {
    if (e instanceof HttpException) {

if the check is true, the you have an error in your request. Cast the throwable to HttpException, and access is members. E.g.

((HttpException) e).response().errorBody()

if the check is false then you have a network related error.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...