android - 带有转换器的 Rxjava 静态通用实用方法

标签 android rx-java

最近我看到一个RxJava article解释 Transformers并强调如何将它们用于重用 Schedulers .我试图在同一个类中使用它,这个方法工作正常:

<T>Observable.Transformer<T, T> applySchedulers() {
        return new Observable.Transformer<T, T>() {
            @Override
            public Observable<T> call(Observable<T> observable) {
                return observable
                        .subscribeOn(Schedulers.io())
                        .unsubscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread());
            }
        };
    }

我想用静态方法将它移到辅助类中,这样我就可以在整个 Android 中使用它了应用程序。但是当我尝试使用这个类的方法时

public class RxFunctions {

    public static <T>Observable.Transformer<T, T> applySchedulers() {
        return new Observable.Transformer<T, T>() {
            @Override
            public Observable<T> call(Observable<T> observable) {
                return observable
                        .subscribeOn(Schedulers.io())
                        .unsubscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread());
            }
        };
    }
}

在另一个类中

public void requestLoginState() {
        restClient.requestLoginState()
                .compose(RxFunctions.applySchedulers())
                .subscribe(new TimberErrorSubscriber<LoginStateResponse>() {
                    @Override
                    public void onCompleted() {
                    }
                    ...

它将不再识别我的 Subscriber ,错误:Cannot resolve method 'subscribe(anonymous com.example.util.rx.TimberErrorSubscriber<com.example.network.retrofit.response.login.LoginStateResponse>)'

我正在使用 Java8没有Retrolambda . 将撰写行更改为

.compose(this.<LoginStateResponse> RxFunctions.applySchedulers())

导致 LoginState 类型出错,提示 Reference parameters are not allowed here

我对 RxJava 还很陌生并感谢任何建议。

最佳答案

编辑:现在 Android 做 support java 8

你说你在 android 上使用 Java8,但 android 不支持 Java8 没有像 retrolambda 这样的插件,所以我假设你实际上是用 Java6 编译的(因为 Java7 只适用于 KitKat 及更高版本)。

在这种情况下,您可能需要明确 applySchedulers 的参数类型.我相信你在写 this.<LoginStateResponse> 时曾尝试这样做,但这只有在您的通用方法在您当前的类中时才有效。

在您的情况下,您实际需要的是在静态方法调用中指定类型:

.compose(RxFunctions.<LoginStateResponse>applySchedulers())

关于android - 带有转换器的 Rxjava 静态通用实用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243785/

相关文章:

android - 由 : rx. 异常引起。MissingBackpressureException

android - RecyclerView 使用 RxJava 无限滚动

c# - 如何在 Xamarin 中动态添加 UI 元素(如 "picker")到 View ?

android - 401 Unauthorized error.将授权码升级为凭证对象失败

java - 在同时按下按钮时播放声音

android - 根据条件从列表创建 Observable

android - 在 RxJava 中将 Singles 链接在一起

android - 如何使用 RxJava 获取 map 函数返回的结果?

java - 如何在ANDROID中的以下条件下停止正在运行的线程

java - 使用正则表达式验证可变长度字符串