Retrofit2 загрузка асинхронных данных и получение индикатора выполнения - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно показать индикатор выполнения при загрузке чего-либо из моего веб-сервиса, потому что мне нужно сделать переход фрагмента только после завершения загрузки.Я пробовал много разных вещей, но я все еще застрял на старте.Я получил переход до окончания загрузки

Кто-то может показать мне пример или указать направление, откуда искать решение этой проблемы?

 public void efetuarLogin() {
    loadProgress.setVisibility(View.VISIBLE);
    final iRequestsTramita requestsTramita = TramitaService.getInstance().usarServico();
    Call<RespostaTramita> callCapturarUG = requestsTramita.getResposta(new LoginTramita(userLogin,userPass));
    callCapturarUG.enqueue(new Callback<RespostaTramita>() {
        @Override
        public void onResponse(Call<RespostaTramita> call, Response<RespostaTramita> response) {
            //loadProgress.setVisibility(View.GONE);
            if (response.isSuccessful()) {
                doing something...
                baixarObrasGestor();
                loadProgress.setVisibility(View.GONE);

            } else {
                doing something...
            }

        }

        @Override
        public void onFailure(Call<RespostaTramita> call, Throwable t) {
           ...
        }
    });
}

public void baixarObrasGestor(){
    List<Gestao> listaIdRequisicao = bancoDadosController.gerarListaRequisicaoGeoPB(userLogin);
    iRequestsGeoPB requestsGeoPB = GeoPBService.getInstance().usarServico();
    //make some requests to webservice
    for (Gestao gestao : listaIdRequisicao){
        ...
        Call<List<RespostaGeoPB>> callBaixarObras = requestsGeoPB.baixarObrasGestor(headers, paramRequisicao);
        callBaixarObras.enqueue(new Callback<List<RespostaGeoPB>>() {
            @Override
            public void onResponse(Call<List<RespostaGeoPB>> call, Response<List<RespostaGeoPB>> response) {
                ...doing something
            }

            @Override
            public void onFailure(Call<List<RespostaGeoPB>> call, Throwable t) {
                Log.d("TESTE", "erro: " + t.getMessage());
            }
        });
    }
    selecionaUG(); //do  the fragment transition
}

1 Ответ

0 голосов
/ 08 июня 2018

Лично я переопределяю Callback<T> это дает вам возможность включить все пользовательские события, которые вы хотите вызвать как.

public abstract class RetryCallback<T> implements Callback<T> { ... }

Если вы хотите услышать только по завершении загрузки, этого достаточно, достаточно скелета.Но убедитесь, что из вашего onResponse или onFailure не возникло какое-то исключение.Я часто видел переход без уведомления, когда возникает какое-то исключение.Упакуйте свой код внутри try-catch и посмотрите, не является ли это проблемным случаем.

public void onResponse(Call<T> call, Response<T> response) {
    if(!response.isSuccessful()){
        // ....
        loadingComplete();
        return;
    }
    // ...
    loadingComplete();
}

@Override
public void onFailure(Call<T> call, Throwable t) {
    // ...
    loadingComplete();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...