Исключение нулевого указателя при попытке отменить диалог прогресса в AsyncTask в Android

1

Я получаю исключение Null Pointer при отмене диалога "Прогресс" в Async Task. Это мой код. Я получаю данные из собрания RSS в течение 7 дней недели. Я хочу отменить диалог и остановить задачу если пользователь нажал кнопку "Назад".

          @Override
    protected void onPreExecute() {
        showDialog(DIALOG_PROGRESS);
        Calendar calendar = null;
        switch (day) {
            case SAT:
                calendar = DateUtil.getSaturdayDate();
                break;
            case SUN:
                calendar = DateUtil.getSundayDate();
                break;
            case MON:
                calendar = DateUtil.getMondayDate();
                break;
            case TUE:
                calendar = DateUtil.getTuesdayDate();
                break;
            case WED:
                calendar = DateUtil.getWednesdayDate();
                break;
            case THU:
                calendar = DateUtil.getThursdayDate();
                break;
            case FRI:
                calendar = DateUtil.getFridayDate();
                break;
            default:
                break;
        }

        if(calendar != null) {
            generatedLink = WeeklyScheduleBean.generatePath( DateUtil.getDay(calendar),
                                                             DateUtil.getMonth(calendar),
                                                             DateUtil.getYear(calendar) );
        } else {
            // get the schedule of today
            Calendar current_day = DateUtil.getCurrentTime();
            generatedLink = WeeklyScheduleBean.generatePath( DateUtil.getDay(current_day),
                                                             DateUtil.getMonth(current_day),
                                                             DateUtil.getYear(current_day) );
        }
    }

        @Override
    protected Boolean doInBackground(Void... params) {
        feedParser = new WeeklyScheduleParser(generatedLink);
        list = new ArrayList<WeeklyScheduleBean>();
        try {
            list = feedParser.parse();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }           

        if(list.size() > 0)                             
            return true;
        else 
            return false;           
    }



        @Override
    protected void onPostExecute(Boolean result) {
        if(progressDialog.isShowing()){
        if(result) {
            weeklyScheduleScreen.removeDialog(DIALOG_PROGRESS);
            adapter = new WeeklyAdapter(cxt, R.layout.time_text_list, R.id.title_text, list);
            lv.setAdapter(adapter);
        } 
        else {
            DialogUtil.CreateDialog("", "Could not retreive the feeds",false,WeeklyScheduleScreen.this);
            weeklyScheduleScreen.removeDialog(DIALOG_PROGRESS);
        }
        }
    }
}
  • 0
    где вы определяете weeklyScheduleScreen ??
  • 0
    WeeklyScheduleScreen - это экран с этим кодом.
Показать ещё 4 комментария
Теги:
android-asynctask
dialog

3 ответа

0
Лучший ответ

попробуйте изменить showDialog(DIALOG_PROGRESS); для progressDialog.show();

  • 0
    Это предотвратит правильное управление диалогом в течение жизненного цикла действия в случае изменения конфигурации.
  • 0
    Можете ли вы объяснить свой ответ и помочь мне решить эту проблему .. пожалуйста
Показать ещё 2 комментария
0

Вы не инициализируете weeklyScheduleScreen любом месте. Кроме того, поскольку showDialog можно вызывать без какого-либо объекта, я предполагаю, что этот AsyncTask вложен в ваш класс активности. В этом случае вам не требуется weeklyScheduleScreen. Просто измените его на removeDialog(DIALOG_PROGRESS); (без weeklyScheduleScreen.).

0

Вы должны проверить:

if (isCancelled())

в ваших методах AsyncTask, и вы должны подумать об переопределении метода AsyncTask onCancelled, чтобы в нужный момент закрыть диалоговое окно выполнения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню