onPostExecute (), кажется, вызывается только один раз - PullRequest
0 голосов
/ 07 марта 2019

Я создал class, который расширяет AsyncTask, для синхронизации с сервисом. После окончания синхронизации я хочу указать время (чч: мм) в TextView, чтобы сообщить пользователю, когда синхронизация была сделана в последний раз. Я делаю это внутри onPostExecute().
Проблема в том, что это происходит только один раз. TextView не обновляется позже.
Я уверен, что doInBackground() вызывается, потому что синхронизация занимает достаточно много времени, как при запуске приложения (записей много), но я не могу быть уверен на 100%, так как сбор данных не меняется на все.
Это мой AsyncTask класс:

private class Reconnect extends AsyncTask<String, Void, Void>{

        private RotateAnimation anim = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);

        @Override
        protected void onPreExecute() {
            rlRefresh.setEnabled(false);
            anim.setInterpolator(new LinearInterpolator());
            anim.setRepeatCount(Animation.INFINITE);
            anim.setDuration(700);
            refreshIV.startAnimation(anim);
        }



        @Override
        protected Void doInBackground(String... strings) {
            retrofit2.Call<List<ServiceTaskAxapta>> call = api.getTasks("1", strings[0]);
            retrofit2.Response<List<ServiceTaskAxapta>> response = null;
            try {
                response = call.execute();
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(response.code() != 200){
                Toast.makeText(context, "Error 1", Toast.LENGTH_SHORT).show();
            } else {

                for (int i = 0; i < response.body().size(); i++){
                    String endTime = DateParser.increaseTimeString(response.body().get(i).getReportTime(), 8, 0, false, null, null, null);

                    allTasksDB.insertIntoDB(response.body().get(i).getTaskID(), "path", response.body().get(i).getStreet(), response.body().get(i).getCity(), response.body().get(i).getPhoneNumber(),
                            response.body().get(i).getCompanyName(), Integer.parseInt(response.body().get(i).getReportDay()), Integer.parseInt(response.body().get(i).getReportMonth()),
                            Integer.parseInt(response.body().get(i).getReportYear()), Integer.parseInt(response.body().get(i).getDeadlineDay()), Integer.parseInt(response.body().get(i).getDeadlineMonth()),
                            Integer.parseInt(response.body().get(i).getDeadlineYear()), response.body().get(i).getReportTime(), endTime);
                }

            }

            call = api.getTasks("2", strings[0]);
            response = null;
            try {
                response = call.execute();
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(response.code() != 200){
                Toast.makeText(context, "Error 2", Toast.LENGTH_SHORT).show();
            } else {
                for (int i = 0; i < response.body().size(); i++){
                    String endTime = DateParser.increaseTimeString(response.body().get(i).getStartTimeMax(), 24, 0,false, null, null, null);

                    acceptedTasksDB.insertIntoDB(response.body().get(i).getTaskID(), "path", response.body().get(i).getStreet(), response.body().get(i).getCity(), response.body().get(i).getPhoneNumber(),
                            response.body().get(i).getCompanyName(), Integer.parseInt(response.body().get(i).getDeadlineDay()), Integer.parseInt(response.body().get(i).getDeadlineMonth()),
                            Integer.parseInt(response.body().get(i).getDeadlineYear()), Integer.parseInt(response.body().get(i).getAcceptedDay()), Integer.parseInt(response.body().get(i).getAcceptedMonth()),
                            Integer.parseInt(response.body().get(i).getAcceptedYear()), response.body().get(i).getStartTime(), endTime, response.body().get(i).getStartTimeMax(), false, false,
                            null, null);
                }
            }

            call = api.getTasks("3", strings[0]);
            response = null;
            try {
                response = call.execute();
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(response.code() != 200){
                Toast.makeText(context, "Error 3", Toast.LENGTH_SHORT).show();
            } else {
                for (int i = 0; i < response.body().size(); i++){

                    acceptedTasksDB.insertIntoDB(response.body().get(i).getTaskID(), "path", response.body().get(i).getStreet(), response.body().get(i).getCity(), response.body().get(i).getPhoneNumber(),
                            response.body().get(i).getCompanyName(), Integer.parseInt(response.body().get(i).getDeadlineDay()), Integer.parseInt(response.body().get(i).getDeadlineMonth()),
                            Integer.parseInt(response.body().get(i).getDeadlineYear()), Integer.parseInt(response.body().get(i).getAcceptedDay()), Integer.parseInt(response.body().get(i).getAcceptedMonth()),
                            Integer.parseInt(response.body().get(i).getAcceptedYear()), response.body().get(i).getStartTime(), null, response.body().get(i).getStartTimeMax(), true, false,
                            null, null);
                }
            }

            call = api.getTasks("4", strings[0]);
            response = null;
            try {
                response = call.execute();
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(response.code() != 200){
                Toast.makeText(context, "Error 4", Toast.LENGTH_SHORT).show();
            } else {
                for (int i = 0; i < response.body().size(); i++){

                    acceptedTasksDB.insertIntoDB(response.body().get(i).getTaskID(), "path", response.body().get(i).getStreet(), response.body().get(i).getCity(), response.body().get(i).getPhoneNumber(),
                            response.body().get(i).getCompanyName(), Integer.parseInt(response.body().get(i).getDeadlineDay()), Integer.parseInt(response.body().get(i).getDeadlineMonth()),
                            Integer.parseInt(response.body().get(i).getDeadlineYear()), Integer.parseInt(response.body().get(i).getAcceptedDay()), Integer.parseInt(response.body().get(i).getAcceptedMonth()),
                            Integer.parseInt(response.body().get(i).getAcceptedYear()), response.body().get(i).getStartTime(), null, response.body().get(i).getStartTimeMax(), true, true,
                            null, null);
                }
            }

            call = api.getTasks("5", strings[0]);
            response = null;
            try {
                response = call.execute();
            } catch (IOException e) {
                e.printStackTrace();
            }

            if(response.code() != 200){
                Toast.makeText(context, "Error 5", Toast.LENGTH_SHORT).show();
            } else {
                dbConnectionProblems.open();
                for (int i = 0; i < response.body().size(); i++){

                    acceptedTasksDB.insertIntoDB(response.body().get(i).getTaskID(), "path", response.body().get(i).getStreet(), response.body().get(i).getCity(), response.body().get(i).getPhoneNumber(),
                            response.body().get(i).getCompanyName(), Integer.parseInt(response.body().get(i).getDeadlineDay()), Integer.parseInt(response.body().get(i).getDeadlineMonth()),
                            Integer.parseInt(response.body().get(i).getDeadlineYear()), Integer.parseInt(response.body().get(i).getAcceptedDay()), Integer.parseInt(response.body().get(i).getAcceptedMonth()),
                            Integer.parseInt(response.body().get(i).getAcceptedYear()), response.body().get(i).getStartTime(), null, response.body().get(i).getStartTimeMax(), true, false,
                            null, null); 


                    dbConnectionProblems.insertIntoDB(response.body().get(i).getTaskID(), true, null, null, null, null);
                }
                dbConnectionProblems.close();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            if(!anim.hasEnded()){

                refreshIV.setAnimation(null);
            }
            String lastSynchro = calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + "@" + calendar.get(Calendar.DAY_OF_MONTH) + "-" + (calendar.get(Calendar.MONTH)-1) + "-" + calendar.get(Calendar.YEAR);
            ProjectStuff.saveLastSynchro(lastSynchro, context);

            String synchroTime = "Last synchro: " + DateParser.parseTime(context, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE));
            tvSynchroInfo.setText(synchroTime);
            rlRefresh.setEnabled(true);

        }
    }


И метод execute():

rlRefresh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Reconnect refreshEvent = new Reconnect();
                refreshEvent.execute("12");
            }
        });

Через некоторое время (необходимое для синхронизации) аминирование прекращается, поэтому похоже, что onPostExecute () вызывается, и TextView обновляется, но каждый последующий вызов не обновляет его.

1 Ответ

0 голосов
/ 08 марта 2019

Хорошо, я нашел проблему.Я вызвал calendar = Calendar.getInstance() внутри onCreate() метода,
Я должен был сделать это в onPostExecute() прямо перед сохранением и показать его внутри TextView, чтобы получить правильное время.

...