Android RxJava2-同步执行调用
我有一个Android RxJava2-同步执行调用,android,rx-java2,Android,Rx Java2,我有一个TestService,在这里我执行一个异步任务来获取数据。我想在继续之前等待答复 public List<Data> getData() { List<Data> data = new ArrayList<>(); Disposable disposable = repository.getDataFromApi(false) .observeOn(AndroidSchedulers.mainThread()
TestService
,在这里我执行一个异步任务来获取数据。我想在继续之前等待答复
public List<Data> getData() {
List<Data> data = new ArrayList<>();
Disposable disposable = repository.getDataFromApi(false)
.observeOn(AndroidSchedulers.mainThread())
.subscribe( newData -> {
data.addAll(newData);
}, __ -> { });
mCompositeDisposable.add(disposable);
//Here I want to stop till "Data" arraylist is filled with data
... do something with data
}
它说无法解析方法subscribe
,所以我可能称它为错误的
fun getDataFromApi(): Single<List<Data>> {
return service.getData()
.map { jsonApiObject ->
...
return@map data
}
}
fun getDataFromApi():单个{
return服务
.map{jsonApiObject->
...
return@map资料
}
}
希望您知道,在RxJava中,阻塞是一种强大的反模式,您应该尽可能避免阻塞
也就是说,如果你真的需要阻止,你有两个选择:
- 如名称所示,使用它阻止当前线程并直接返回publisher的值(
)。这可能就是你要找的。就你而言:Single
newData = repository.getDataFromApi(false).blockingGet(); data.addAll(newData);
- 与Java类同步,比如-更复杂,我会使用
,因为它更简单。但这是有可能的blockingGet()
newData = repository.getDataFromApi(false).blockingGet();
data.addAll(newData);