2015-11-29 36 views
8

Yêu cầu của tôi sẽ nhận được JSON cho lỗi POJO hoặc JSON được mô tả (có thể là trường yêu cầu không hợp lệ, sự cố máy chủ, v.v.).Xử lý lỗi trong Retrofit 2 RX

Nhưng trang bị thêm trong người đăng ký mang lại cho tôi chỉ Throwable. Làm thế nào tôi có thể tìm ra là một lỗi mạng, mã http là gì, và nhận được JSON có lỗi?

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()); 
    } 
} 

Trả lời

10

Vì bạn đang sử dụng RxJava, onError được gọi trong trường hợp lỗi mạng và điểm cuối báo lỗi liên quan là một phần của Response. Trong trường hợp lỗi, kiểm tra xem Throwable là một thể hiện của HttpException

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

nếu kiểm tra là đúng, các bạn có một lỗi trong yêu cầu của bạn. Truyền số người ném đến HttpException và quyền truy cập là thành viên. Ví dụ.

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

nếu séc là false thì bạn có lỗi liên quan đến mạng.

+0

Làm cách nào để nhận đối tượng Response trong Rx? – DmitryBorodin

+0

Tôi đã chỉnh sửa câu trả lời của mình – Blackbelt

+0

Cảm ơn bạn. Tôi vừa kiểm tra - onError callen trong trường hợp bất kỳ mã nào không phải là 200 http. Không chỉ lỗi mạng. – DmitryBorodin

Các vấn đề liên quan