我可以想到两种方法从Single
获取值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方法。
有没有更好的方法来获得价值
答案 0 :(得分:3)
当我们使用toBlocking
时,我们会立即得到结果。当我们使用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
有助于您在&#34;正常&#34;中使用Observables的情况您需要获得结果的代码。
subscribe
可帮助您在Android应用程序中为您提供帮助,例如在subscribe
中设置一些操作,例如在页面上显示结果,禁用制作按钮等。
答案 1 :(得分:2)
即使不建议阻止它(你应该订阅),在RxJava v2中阻塞的方法是blockingGet(),它会立即返回对象。