我是RxJava的新手。
我正在使用api调用api.java进行改造:
@GET("someurl")
Observable<Profile> getProfile();
我想用一个方法实现一些服务,返回Observable<Profile>
和:
1)如果某人首先订阅了observable,那么在开始时调用API请求,结果(profile)将在订阅者处可用。
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调用后没有取消订阅。
答案 0 :(得分:0)
让您的主题订阅您的实际API observable,然后其他订阅订阅主题。
Api api = getRetrofitApiInterfaceIpml();
BehaviorSubject<Profile> subject = BehaviorSubject.create();
Observable<Profile> profileObservable = api.getProfile();
profileObservable.subscribe(subject);
然后将主题公开为可观察的主题。