我创建一个BehaviorRelay
然后使用accept()
开始网络调用。
BehaviorRelay<Object> behaviorRelay = BehaviorRelay.createDefault(Observable.empty());
behaviorRelay.accept(searchDiscogsInteractor.getArtistsReleases(id));
这是对网络调用Observable
所做的:
public Single<List<Release>> getArtistsReleases(String artistId)
{
return discogsService.getArtistReleases(artistId, token, "asc", "500")
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.flatMapIterable(RootReleaseResponse::getReleases)
.filter(release -> !release.getRole().equals("TrackAppearance"))
.toList();
}
当我subscribe()
到该BehaviorRelay
时,我需要订阅订阅才能获得正确的结果。在第一个订阅中,我返回了一个ObservableToListSingle
,然后我可以subscribe()
该,然后获得正确的值。
behaviorRelay.subscribe(o ->
{
Log.e(TAG, o.toString());
((ObservableToListSingle) o).subscribe(o1 ->
Log.e(TAG, o1.toString())); <-- correct value
});
为什么会这样?我错过了某个地方subscribe()
的电话吗?
为什么会这样?
你期望会发生什么?你期望BehaviorRelay
发出List<Release>
吗?
你声明了BehaviorRelay<Object>
实际上是BehaviorRelay<Observable>
,所以你发出Observable
而不是List<Release>
。
我认为这就是您的目的:
searchDiscogsInteractor.getArtistsReleases(id)
.subscribe(releaseList -> relay.accept(releaseList));
现在,当订阅relay
时,您将获得List<Release>
。