У меня есть 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
}
В Volley я мог бы просто позвонить req.executeSynchronously();
, чтобы это произошло.Поскольку getData()
уже должен возвращать данные, мне нужно как-то заставить его ждать, пока я не получу ответ.Как это сделать?Я использую Single
.
Мой подход с использованием getBlocking ();
public List<Data> getData() {
List<Data> data = new ArrayList<>();
Disposable disposable = repository.getDataFromApi(false)
.observeOn(AndroidSchedulers.mainThread())
.blockingGet();
.subscribe( newData -> {
data.addAll(newData);
}, __ -> { });
mCompositeDisposable.add(disposable);
//Here I want to stop till "Data" arraylist is filled with data
... do something with data
}
Это говорит cannot resolve method subscribe
, поэтому я, вероятно, называю это неправильно ..
fun getDataFromApi(): Single<List<Data>> {
return service.getData()
.map { jsonApiObject ->
...
return@map data
}
}