Android 如何在Observer.onNext中运行IO操作';它被称为内主线程
我有一个产品列表,其中有一个图像作为uri(字段),我需要保存在内部存储器上。我没有找到如何使用当前代码执行此操作的问题:Android 如何在Observer.onNext中运行IO操作';它被称为内主线程,android,multithreading,rx-java,Android,Multithreading,Rx Java,我有一个产品列表,其中有一个图像作为uri(字段),我需要保存在内部存储器上。我没有找到如何使用当前代码执行此操作的问题: 我使用改装从WS获得数据 RestClient.getClient().getProducts() 当我从WS获得数据时,我需要将它们保存到领域数据库中 在域数据库上保存图像后,我尝试将图像保存在内部存储器上,但我无法保存,因为onNext是在main线程内调用的 public void getProductsHandler(final Context context) {
RestClient.getClient().getProducts()
onNext
是在main线程内调用的
public void getProductsHandler(final Context context) {
MyApplication application = MyApplication.get(context);
rx.Observable<ProductResponse> faq = RestClient.getClient()
.getProducts()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.defaultSubscribeScheduler());
faq.subscribe(new Observer<ProductResponse>() {
@Override public void onCompleted() {
}
@Override public void onError(Throwable e) {
}
@Override public void onNext(ProductResponse response) {
RealmService realmService = new RealmService(realm);
realmService.setProducts(response.getResults());
((MainActivity) context).saveBannersIntoInternal(response.getResults());
}
});
}
public void getProductsHandler(最终上下文){
MyApplication=MyApplication.get(上下文);
rx.Observable faq=RestClient.getClient()
.getProducts()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.defaultSubscribeScheduler());
常见问题解答。订阅(新观察者(){
@覆盖已完成的公共void(){
}
@覆盖公共无效onError(可丢弃的e){
}
@覆盖公共void onNext(ProductResponse响应){
RealmService RealmService=新的RealmService(领域);
setProducts(response.getResults());
((MainActivity)context.saveBannersIntoInternal(response.getResults());
}
});
}
有好的解决方案吗?使用
flatMap
将web服务调用和保存到DB这两个操作链接在一起
RestClient.getClient().getProducts()
.flatMap(response -> saveToDB())
.subscribeOn(Schedulers.io());
最后一个
订阅(Schedulers.io())
call将使改装调用和flatMap
都可以在IO调度程序上运行。如果我可以问一下,创建线程并启动它们是否发生了什么事情?@Super-califorgilistic我想到了相同的解决方案,但想知道是否可能使其更好您应该使用rx操作符进行操作链接,在您的情况下,flatMap