我有一个产品列表,其中有一个图像作为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()); } }); }
有好的解决方案吗?
使用flatMap
将web服务调用和保存到DB两个操作链接在一起。
RestClient.getClient().getProducts()
.flatMap(response -> saveToDB())
.subscribeOn(Schedulers.io());
最后一个subscribeOn(Schedulers.io())
调用将允许Retrofit调用和flatMap
在IO Scheduler上运行。