2017-01-14 8 views
1

を抽出する方法を私はシングル単一RxJavaは、オブジェクト

Single<HotelResult> observableHotelResult = 
          apiObservables.getHotelInfoObservable(requestBody); 

final HotelResult[] hotelResults = new HotelResult[1]; 
    singleHotelResult 
      .subscribe(hotelResult -> { 
       hotelResults[0] = hotelResult; 
      }); 

それとも

final HotelResult hotelResult = singleHotelResult 
            .toBlocking() 
            .value(); 

それは、私たちが.toBlockingメソッドを使用しないでくださいマニュアルに書かれているから値を取得するには、2つの方法を考えることができます。

だから我々は、我々はすぐに結果を取得、その後toBlockingを使用する場合は値

+1

https://github.com/ReactiveX/RxJava/issues/3956 –

答えて

2

を得るために任意のより良い方法があります。 subscribeを使用すると、結果は非同期で取得されます。遮断する場合については

Single<HotelResult> observableHotelResult = 
    apiObservables.getHotelInfoObservable(requestBody); 

final HotelResult[] hotelResults = new HotelResult[1]; 
singleHotelResult.subscribe(hotelResult -> { 
    hotelResults[0] = hotelResult; 
}); 
// hotelResults[0] may be not initialized here yet 
// println not show result yet (if operation for getting hotel info is long) 
System.out.println(hotelResults[0]); 

:あなたはあなたの場所に結果を持っている必要があり、「正常な」コードで観測を使用しているとき

final HotelResult hotelResult = singleHotelResult.toBlocking().value(); 
// hotelResult has value here but program workflow will stuck here until API is being called. 

toBlockingは例に役立ちます。あなたも、(あなたが購読する必要があります)、それを阻止することは推奨されませんなど

+0

結果が取得されるまで待つ必要があります。だから、購読の場合でも私は(私の意見では)呼び出しでも同期されるようにスケジューラを言及していない。私の使用事例では、私は観測のみをブロックするつもりです。 – Deepanshu

0

無効にボタンを作り、ページ上のショーの結果のようなsubscribeでいくつかのアクションを設定することができたときに

subscribeは、Androidのアプリケーションで、たとえばあなたを助けますRxJava v2では、ブロッキングのためのメソッドblockingGet()が、すぐにオブジェクトを返します。

関連する問題