android - Retrofit + RxJava 中的链接请求

标签 android rx-java retrofit2

我有 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));

(自己添加必要的observeOnsubscribeOn,就像你需要的一样)

关于android - Retrofit + RxJava 中的链接请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785090/

相关文章:

android - 通过从 RawContacts 中过滤 account_type 列来显示联系人

android - 禁用/删除 TextInputLayout XML 中的 float 标签提示文本

java - 使用 parcelable 的 onListItemClick 未捕获的异常

java - 如何使 Retrofit 接受每个请求的下载进度回调?

android - SQLite Where IN 后跟变量 String

java - 使用 RxJava 进行改造时处理额外的 observable

java - 在 Mockito 中链接不同的返回以进行 retryWhen 调用

java - 嵌套 RxJava Observables 的正确方法?

android - 如何使用 RxJava2 创建 2 个或两个并行网络请求?

android - 如何在服务生成器类的改造中添加 http 拦截器