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()
    ,因为它更简单。但这是有可能的


我用你的建议更新了帖子。也许你可以帮我纠正我调用blockingGet()的语法,因为我不知道该怎么做。我添加了关于我的实现的额外信息。
newData = repository.getDataFromApi(false).blockingGet();
data.addAll(newData);