gpt4 book ai didi

java - 如何让flatMap在后台线程执行

转载 作者:搜寻专家 更新时间:2023-10-30 21:32:46 25 4
gpt4 key购买 nike

我正在使用 Retrofit 和 RxJava 来执行一些后台任务。代码如下所示:

public class MyLoader{  
public Observable<MyData> getMyData(){
return setupHelper().flatMap(new Func1<MyHelper, Observable<MyData>>() {
@Override
public Observable<MyData> call(MyHelper myHelper) {
return queryData(myHelper);
}
});
}

private Observable<MyData> queryData(MyHelper myHelper){
...
}

private Observable<MyHelper> setupHelper(){
return Observable.create(new Observable.OnSubscribe<MyHelper>() {
@Override
public void call(final Subscriber<? super MyHelper> subscriber) {
try{
MyHelper helper = makeRetrofitCall();//Using Retrofit blocking call to get some data
subscriber.onNext(helper);
subscriber.onCompleted();
}catch(RetrofitError e){
subscriber.onError(e)
}
}
}
}
}

由于 NetworkOnMainThread 此行出现异常,导致 RetrofitError 失败:

  MyHelper helper = makeRetrofitCall();//Using Retrofit blocking call to get some data

订阅我的 Observable:

myLoader.getMyData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<MyData>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(MyData inventory) {

}
});

根据 Rx 文档 flatMap 不在任何后台线程上运行。我的问题是如何确保整个 getMyData() 方法在后台运行。

最佳答案


我只需在 flatMap 之前添加 observeOn(Schedulers.newThread()) 就可以了!

关于java - 如何让flatMap在后台线程执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32371775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com