#android #rxjava #rxandroid #rxjava2
У меня есть AsyncTask, который я хочу переделать в Rx Вот так выглядит мой AsyncTask new AsyncTask() { ArrayList undoneServiceCodes = new ArrayList<>(); HashMap undoneForms = new HashMap<>(); boolean isHasAtLeastOneDoneServiceCode = false; @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?
Ответы
Ответ 1
Можно воспользоваться оператором 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))
Комментариев нет:
Отправить комментарий