我有 2 个 API,我想按顺序发出请求并将它们的数据存储在 SQLite 中。
首先我想向 API A
发出请求并将其数据存储在 SQL 表 a
中。然后向 API B
发出请求,并将其数据存储在表 b
中,并将一些数据存储在表 a_b
中。 a_b
中存储的数据仅来自请求 B
。
如何使用 RxJava 做到这一点。我在某处读到了关于为此使用 flatMap 的信息,类似这样的
apiService.A()
// store in DB here? How? maybe use map()?
.flatMap(modelA -> {
// or maybe store modelA in DB here?
return apiService.B().map(modelB -> {
storeInDB()l // store B here ?
return modelB;
});
});
如果我不使用 lambda 函数,这看起来和普通的嵌套调用一样难看。这是更好的方法吗?
最佳答案
我不认为使用 map
运算符是处理诸如存储 api 调用结果之类的最佳方法。
我喜欢做的是在 doOnNext
运算符中分离这些东西。所以你的例子是这样的:
apiService.A()
.doOnNext(modelA -> db.store(modelA))
.flatMap(modelA -> apiService.B())
.doOnNext(modelB -> db.store(modelB));
(自己添加必要的observeOn
和subscribeOn
,就像你需要的一样)
关于android - Retrofit + RxJava 中的链接请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785090/