2017-04-10 13 views
0

BehaviorRelayを作成してから、accept()を使用してネットワークコールを開始します。BehaviorRelay経由でルーティングしたときにRetrofitでobservableを2回呼び出す必要があります

BehaviorRelay<Object> behaviorRelay = BehaviorRelay.createDefault(Observable.empty()); 
behaviorRelay.accept(searchDiscogsInteractor.getArtistsReleases(id)); 

これは、ネットワーク呼び出しObservableで行われているものです。私は、その後subscribe()そのBehaviorRelayに私は正しい結果を得るために、サブスクリプションに加入する必要がある場合

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(); 
    } 

。最初のサブスクリプションで私はObservableToListSingleを返信してから、subscribe()としてから正しい値を得ることができます。

behaviorRelay.subscribe(o -> 
     { 
      Log.e(TAG, o.toString()); 
      ((ObservableToListSingle) o).subscribe(o1 -> 
        Log.e(TAG, o1.toString())); <-- correct value 
     }); 

どうしてですか?どこかでsubscribe()への電話がありませんか?

答えて

0

どうしてですか?

あなたは何が起こると思われますか? List<Release>BehaviorRelayが放出すると思われましたか?

実際にはBehaviorRelay<Observable>となっており、Observableであり、List<Release>ではありません。

私は、これはあなたが何であるかだと思う:今

searchDiscogsInteractor.getArtistsReleases(id) 
         .subscribe(releaseList -> relay.accept(releaseList)); 

relayに加入したときにList<Release>になるだろう。

関連する問題