如何使用RxJava运行此语句



Rx做事的方式可能非常复杂,原因很多。。。但我觉得有一些简单的方法可以用RX做简单的事情。。。

如何在后台线程上简单地执行此语句并在ui线程上接收响应?

这个对象的所有函数都需要在后台线程上运行。获取、放置、清除和删除。

 String city = Paper.get("city");

Rx中的基本对象是Observable。该对象通常包装一个OnSubscribe对象,它只是Action1的一个扩展,以Subscriber作为参数。

这意味着您只需要定义一个类来包装您的调用并将结果传递给Subscriber:

public class RxPaperGet implements Observable.OnSubscribe<String> {
    @Override
    public void call(Subscriber<? super String> t1) {
        try {
            t1.onNext(Paper.get("city"));
        } catch (Throwable t) {
            t1.onError(t);
            return;
        }
        t1.onCompleted();
    }
}

这是一个基本的例子。现在,您需要包装它,这样您就可以调用任何函数,而不仅仅是Paper.get("city")。类似于https://github.com/ReactiveX/RxJavaAsyncUtil/blob/0.x/src/main/java/rx/util/async/operators/OperatorFromFunctionals.java#L44通过允许您传递任意的Callable

在您的情况下,将实现为:

Observable<String> res = OperatorFromFunctionals.fromCallable(() -> Paper.get("city"));

(如果你想知道的话,这是Retromlambda为android带来的java8 lambdas。很好地消除了Rx的冗长(

一旦你有了可观察的东西,你就可以订阅它,并得到结果。要在后台执行并在ui线程上检索结果,您需要执行以下操作:

 res.subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())

CCD_ 8由CCD_。

然后您可以简单地被调用返回结果:

.subscribe(city -> Log.d(TAG, city));

这会返回订阅,如果你需要取消订阅,这很有用

总体:

OperatorFromFunctionals.fromCallable(() -> Paper.get("city"))
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(city -> Log.d(TAG, city));

编辑:这是不正确的不会删除答案以保留评论。

非常简单的例子:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getPaper()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.d("xxx", s);
                }
            });

}
private Observable<String> getPaper() {
    return Observable.just(Paper.get());
}

其中CCD_ 10是返回CCD_。检查文档中的Scheduler。

如果你在收到操作结果后想要更改UI,不要忘记在主线程上观察,否则你会在UI线程外更改UI。

相关内容

  • 没有找到相关文章

最新更新