Исключение нулевого указателя при попытке отменить диалог прогресса в AsyncTask в Android - PullRequest
1 голос
/ 26 декабря 2011

Я получаю исключение нулевого указателя при отмене диалогового окна хода выполнения в асинхронной задаче ... это мой код.остановите задачу, если пользователь нажал кнопку «Назад».

          @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);
        }
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 26 декабря 2011

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

0 голосов
/ 26 декабря 2011

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

if (isCancelled())

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

0 голосов
/ 26 декабря 2011

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

...