使用Retrofit和RX-java处理无网络的正确方法

tbr*_*lle 9 android rx-java retrofit

我想在调用我的rx改装服务之前检查移动设备是否已连接到互联网.如果没有连接,我想返回一个包含错误的假响应.

我结束了下面的解决方案,使用defer(),但我认为它可以更好,任何提示?

private Observable<Response> checkNetwork(Observable<Response> retrofitService) {
        return Observable.defer(new Func0<Observable<Response>>() {
            @Override
            public Observable<Response> call() {
                if (!isOnline()) {
                    return Observable.just(Response.error(R.string.error_no_network_label)));
                }
                return retrofitService;
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

Vas*_*sia 2

您可以像此处描述的那样实现改造 ErrorHandler: /sf/answers/1473918561/

然后在 doOnError 方法或订阅者的 onError 方法中处理抛出的异常。