RxJava 和 Retrofit 的自定义 onNext() 实现

问题描述 投票:0回答:1

我正在使用 RxJava 和 Retrofit,并且我正在尝试找到一种真正干净的方法来抽象我的 API 调用,这样我就可以最大限度地减少 Activity 中的代码。

到目前为止,我有这样的事情:

Observable<SomeObservable> combined =
            Observable.zip(firstObservable, secondObservable, SomeObservable::new);

    // Works but needs header parsing
    RxRestNetworker.performAsyncApiCall(combined, (returnData) -> {
        // onNext() implementation
    }, () -> hideSuggestionProgress());

RxRestNetworker
类看起来像:

public class RxRestNetworker {
    private static final String LOG_TAG = RxRestNetworker.class.getCanonicalName();

    // Default error handling
    private static Action1<Throwable> mOnError = throwable -> {
        Log.e(LOG_TAG, throwable.getMessage());
        throwable.printStackTrace();
    };

    /**
     * Perform the desired request with default error handling
     * @param observable
     * @param onAction
     * @param <T>
     * @return
     */
    public static <T> Subscription performAsyncApiCall(Observable<T> observable, Action1<? super  T> onAction, Action0 onComplete) {
        // Use default error handling
        return performAsyncApiCall(observable, onAction, mOnError, onComplete);
    }

    /**
     * Perform the desired request with some error handling OTHER than the default one
     * @param observable
     * @param onAction
     * @param onError
     * @param <T>
     * @return
     */
    public static <T> Subscription performAsyncApiCall(Observable<T> observable, Action1<? super T> onAction, Action1<Throwable> onError, Action0 onComplete) {
        return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(onAction, onError, onComplete);
    }

}

所以你可以看到我通过调用第一个

onError()
方法来使用默认的
performAsyncApiCall

现在这一切都有效了,但我需要通过访问响应对象来访问响应的标头。

This 帖子声称我应该包装我的响应对象并在 API 中像这样声明它:

Observable<Response<SomeResponse>> getThings();

但我并不关心这个。它看起来很丑,并且让像上面这样的压缩可观察量变得令人头疼。

理想情况下,我想创建

onNext() Action1
参数的抽象,它可以默认记录标头并为每个 API 调用执行其他操作,然后将调用结果传递回调用者。我这样做是不是走错了方向?有人可以帮我找到一种以非常干净的方式抽象这一点的方法吗?

retrofit rx-android abstraction
1个回答
0
投票

为 RxJava 和 Retrofit 创建自定义

onNext()
实现来高效处理 API 调用和响应标头,是抽象和最小化 Activity 中代码的好方法。阅读:

RxJava 和 Retrofit 的自定义 onNext() 实现

© www.soinside.com 2019 - 2024. All rights reserved.