AlertDialog при возникновении ошибки в AsyncTask

258
25 февраля 2017, 04:34

В моем проекте есть главная форма с AsynkTask, на которой я подтягиваю 1 json. Загрузка остальных форм не происходит, пока не придут данные. Задача: сделать так, чтобы

  • Выходил AlertDialog с кнопкой "Повторить".
  • При нажатии Алерт бы закрылся, и осуществилась новая загрузка. Загрузка у меня выражается в открытии прогресс-диалога.

Есть недописанный фрагмент кода с неким флагом, который я обновлял после возникновения ошибки. Убрал лишнее, оставив только суть. Но проблема в том, что сам алерт не закрывался, и прогресс бар его перекрывал собой, когда я возобновлял загрузку. Например, специально выключаешь интернет, открываешь приложение, вызвалось окно. Затем его включаешь, нажимаешь повторить, приложение продолжает работу, получив информацию, а копия незакрытого диалога еще остается, и затем уже сама закрывается, и еще раз посылает сигнал о загрузке.

  @Override
protected void onResume() {
    new ParseTask().execute();
    super.onResume();
}
  private class ParseTask extends AsyncTask<Void, Void, String> {
    Button buttonContinue = (Button) (findViewById(R.id.buttonContinue));
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showProgress();
    }
    @Override
    protected void onCancelled() {
        super.onCancelled();
    }
    @Override
    protected String doInBackground(Void... voids) {
        try {
            ...
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultJson;
    }

    @Override
    public void onPostExecute(final String strJson) {
        super.onPostExecute(strJson);
        ObjectClass objectClass;
        ...
        ....
        try {
            ....
            }
        } catch (JSONException e) {
            e.printStackTrace();
            errorDetecer = true;
        }

        AlertDialog.Builder builder = new lertDialog.Builder(MainActivity.this);
        if(errorDetecer) {
            new ParseTask().onCancelled();
            builder.setTitle("Ошибка загрузки данных");
            builder.setCancelable(false);
            builder.setMessage("Скорее всего, она связана с работой сервера или сети. Повторим операцию?");
            builder.setNegativeButton("Повторить",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.dismiss();
                            alertDialog.dismiss();
                            onResume();
                        }
                    });
            errorDetecer = false;
            alertDialog = builder.create();
            alertDialog.show();
        } else {
        }
        buttonContinue.setVisibility(View.VISIBLE);
        hideProgress();
    }
}

Первый вопрос простой - стоит ли от сложности создания диалога на мой взгляд, присмотреться к более современным технологиям - насколько asynktask олдскулен?

И второй, кто сможет поделиться опытом отслеживания ошибок с применением AlertDialog?

READ ALSO
Изменение данных при нажатии кнопки

Изменение данных при нажатии кнопки

Работаю с java swingНа мониторе отображаются данные с переменной newDegree (благодаря Thread конвертируются разные данные каждые 5 секунд)

316
Деплой сайта, написанного на Java

Деплой сайта, написанного на Java

Пытаюсь развернуть сайт, написанный на Java с использованием фреймворка Vaadin на платном хостингеСделал вcё согласно туториала - скопировал

380
Вопрос как запустить java код на сервере?

Вопрос как запустить java код на сервере?

Задача такая, есть текст с кодом, нужно отправить его через POST на сервер, и виртуальная машина java должна его отработать и вернуть результат...

425