在Android中使用Retrofit结合RxJava我得到一个Observable对象。里面我有一个清单;在表中,我有包含来自对象 Product 的外键的属性。 我的目标是获取 ServiceProductBOM.List,对于每个带有外键的表,我想获取 Observable 并使用来自 Product 的数据更新表中的字段,以便我拥有即产品代码及其密钥。 在该过程结束时,我想将 List 传递给适配器。我想知道如何开发反应部分。
我尝试过这样的事情:
class ServiceProductBOM {
properties....
List<Table>
// getters and setters
}
class Table {
properties...
productForeignKey
productCode // empty to be updated later
// getters and setters
}
class Product {
properties...
key
productcode
....
// getters and setters
}
retrofitWSClient.getServiceProductBOM(...)
.flatMapIterable(bom -> bom.getTable())
.flatMap(row -> retrofitWSClient.getProduct(...)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Once subscribed I do not know how to update the Table properties with properties from Product and keep trace to the end of process.
最后我做了这样的事情:
Observable<Table> observableTable = Observable.fromIterable(bom.getTable());
Observable<Product> productObservable = observableTable
.doOnNext(table -> {
rowTemp = table;
})
.flatMap(table -> retrofitWSClient.getProduct(...))
.doOnNext(product -> {
rowTemp.setProductCode(product.getProductCode());
updatedBom.add(rowTemp);
})
一旦订阅了productObservable并完成,我发现updatedBom填充了用Product数据更新的所有行。