У меня есть AsyncTask, который я хочу переделать в Rx
Вот так выглядит мой AsyncTask
new AsyncTask
@Override
protected void onPreExecute()
{
super.onPreExecute();
if (iCloseCallListener != null)
{
iCloseCallListener.onPreValidation();
}
}
@Override
protected Void doInBackground(Void... params)
{
undoneServiceCodes = getUndoneServiceCodes();
undoneForms = getUndoneForms();
isHasAtLeastOneDoneServiceCode = isHasAtLeastOneDoneServiceCode();
return null;
}
@Override
protected void onPostExecute(Void iVoid)
{
super.onPostExecute(iVoid);
if (iCloseCallListener != null)
{
iCloseCallListener.onPostValidation(undoneServiceCodes, undoneForms, isHasAtLeastOneDoneServiceCode);
}
}
}.execute();
Мне не понятно как можно выполнить в бекграунде Rx , можно выполнить сразу 3 разных метода как в примере с AsyncTask когда в бекграунде выполняется 3 метода
undoneServiceCodes = getUndoneServiceCodes();
undoneForms = getUndoneForms();
isHasAtLeastOneDoneServiceCode = isHasAtLeastOneDoneServiceCode();
Если это был бы один метод(допустим первый) я бы это сделал так
Flowable.fromIterable(getUndoneServiceCodes())//
.subscribeOn(Schedulers.io())//
.observeOn(AndroidSchedulers.mainThread())//
.doOnSubscribe(iSubscription ->
{
if (iCloseCallListener != null)
{
iCloseCallListener.onPreValidation();
}
}).toList()//
.subscribe(resultList -> {
if (iCloseCallListener != null)
{
iCloseCallListener.onPostValidation(iCloseCallListener, ???, ???);
}
});
Но так я получу результат только для одного выполняемого в бекграунде метода, как сделать так, чтоб можно было обрабоать 3?
Ответ
Можно воспользоваться оператором zip как-то так (точность названий методов не гарантирую):
Flowable.zip(
Flowable.fromCallable(method1()),
Flowable.fromCallable(method2()),
Flowable.fromCallable(method3()),
(result1, result2, result3) -> new Triple(result1, result2, result3)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(triple -> iCloseCallListener.onPostValidation(triple.first, triple.second, triple.third))
Комментариев нет:
Отправить комментарий