【发布时间】:2017-03-10 20:26:30
【问题描述】:
我有一个返回 FamilyDetails 的 API。我使用改造来获取它们,它的建模如下:
Observable<FamilyDetails> getFamilyDetails(@Query int personId);
获取后,这些详细信息将用于更新Person。我的 API 在有一些信息要显示时立即提供那些 FamilyDetails,这意味着详细信息可能不完整,因此当服务器尚未完成获取所有家庭详细信息时,响应中会提供 complete = false 标志 -反过来,如果我们在第一个响应中收到 complete = false,我的应用程序应该发送另一个请求以获取剩余的 FamilyDetails,并且只要详细信息仍然不完整,就继续这样做。
我已经“在一定程度上”实现了我想要的,但不是完全用这段代码:
personApiService.getFamilyDetails(personId)
// repeat call
.flatMap(familyDetails -> personApiService.getFamilyDetails(personId))
// until family details are complete
.takeUntil(familyDetails -> familyDetails.isComplete())
// update the person object with the family details
.flatMap(familyDetails -> Observable.just(updatePerson(familyDetails))
//subscribe!
.subscribe(personSubscriber);
我的personSubscriber 返回更新后的Person。
我在这个实现中遇到的问题是部分更新不会通过personSubscriber 的onNext(),因为我只收到一个对onNext() 的调用,其中包含更新的Person 对象及其完整的@987654335 @。
我想使用 RxJava 对其进行建模,并满足以下要求:
- 如果我收到不完整的详细信息,我会更新
Person反对这些详细信息所属,并通过onNext()传递。 - 如果我们收到不完整的详细信息,我们会继续查询 API 以获取完整的详细信息,并在同一观察者中通过
onNext()提供更新的Person对象。 - 一旦我们收到最后一个带有更新的
Person的onNext()调用,就会调用onComplete(),我们就完成了。
提前致谢!
【问题讨论】:
标签: android rx-java retrofit2 rx-java2