我有一个产品列表,其中包含我需要保存在内部存储上的图像uri(字段)。我没有找到如何使用当前代码执行此操作的问题:
我使用改造从WS获得数据
RestClient.getClient().getProducts()
当我从WS获取数据时,我需要将它们保存到Realm DB
在Realm DB上保存图像后,我尝试将图像保存在内部存储上,但我无法在onNext
内调用mainThread
。
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());
}
});
}
有什么好的解决方案吗?
答案 0 :(得分:0)
使用flatMap
将两个操作(Web服务调用和保存到DB)链接在一起。
RestClient.getClient().getProducts()
.flatMap(response -> saveToDB())
.subscribeOn(Schedulers.io());
最后一次subscribeOn(Schedulers.io())
调用将允许Retrofit调用和flatMap
在IO调度程序上运行。