gpt4 book ai didi

java - 如何实现BehaviorSubject + retrofit api调用

转载 作者:行者123 更新时间:2023-11-29 02:34:39 25 4
gpt4 key购买 nike

我是 RxJava 的新手。

我对 api 调用 api.java 使用改造:

@GET("someurl")
Observable<Profile> getProfile();

我想用一个返回 Observable<Profile> 的方法实现一些服务和:

1) 如果有人首先订阅了 observable,那么在开始时调用 API 请求并且结果(配置文件)将在订阅者处可用。

2) 如果其他人订阅了 observable,则订阅者无需调用 API 即可获得已缓存的数据(来自第一个订阅者)。对于第 3、4 个订阅者也是如此......

3) 一些新订阅者希望通过 API 调用获取“最后”数据。在这种情况下,将调用 API 请求,所有订阅者都将获得最后的数据。

我的解决方案MyService.java:

private final BehaviorSubject<Profile> profile = BehaviorSubject.create();

public BehaviorSubject<Profile> subscribe(boolean useCache) {
if (!useCache || !profile.hasValue()) {
api.getProfile().subscribe(new Consumer<Profile>() {

@Override
public void accept(UserProfile result) throws Exception {
profile.onNext(result);
}
});
}

return profile;
}

但是这个解决方案看起来很麻烦。此外,调用 API 后无法取消订阅。

最佳答案

让您的主题订阅您实际的 API 可观察对象,然后其他订阅者改为订阅该主题。

Api api = getRetrofitApiInterfaceIpml();
BehaviorSubject<Profile> subject = BehaviorSubject.create();
Observable<Profile> profileObservable = api.getProfile();
profileObservable.subscribe(subject);

然后将 Subject 公开为可观察的以供订阅。

关于java - 如何实现BehaviorSubject + retrofit api调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47778762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com