Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Retrofit асинхронные вызовы

Использую асинхронные вызовы. И у меня возник вопрос. Я использую ProgressDialog. Дело в том что, если один вызов, то он идеально работает. А если я вызываю несколько, то он закрывает после первого. Понятно что благодаря этому коду dialog.dismiss();. Как сделать так, чтоб все запросы привязать к одному ProgressDialog. Если какие фрагменты кода надо, пишите скину.
public void generateYkrepClan(ApiService api, final ProgressDialog dialog, final String id_clan) {
Call call = api.getYkrepClan(id_clan, application_id); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { dialog.dismiss();
if (response.isSuccessful()) { try { list = response.body().string(); Log.e("EWQ", list); clan_dannie.setYkrep(generateDannieClan.getYkrep(list)); // clan_dannie.setDannieCoklanovzas(generateDannieClan.generatePersonallyDanieClan(list, dannieClanNew)); } catch (IOException e) { e.printStackTrace(); } } else { Snackbar.make(parentView, "kek", Snackbar.LENGTH_LONG).show(); } }
@Override public void onFailure(Call call, Throwable t) { dialog.dismiss(); } });
}


Ответ

Можно воспользоваться RxJava
Api.java
public interface Api { @GET("/api.php") Flowable> getYkrepClan(/**/); }
Простой запрос
Flowable> firstFlowable = api.getYkrepClan(id_clan, application_id);
Два последовательных запроса:
Flowable> flowable = firstFlowable .concatWith(api.anotherRequest());
Два параллельных запроса:
Flowable> flowable = firstFlowable .mergeWith(api.anotherRequest());
Второй запрос на основе результата из первого:
Flowable> flowable = firstFlowable .flatMap(new Function, Flowable>>() { @Override public Flowable> apply(Response response) throws Exception { Log.d("TAG", response.body().string()); return api.anotherRequest(response.body().string()); } })
Выполнить:
flowable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new FlowableSubscriber>() { @Override public void onSubscribe(Subscription s) { //Показать диалог s.request(Long.MAX_VALUE); }
@Override public void onNext(Response responseBodyResponse) { //Прилетел ответ Log.d("TAG",response.body().string()); }
@Override public void onError(Throwable t) { //Ошибка }
@Override public void onComplete() { //Убрать диалог } });

Комментариев нет:

Отправить комментарий