簡體   English   中英

嘗試在Android中取消AsyncTask中的進度對話框時出現空指針異常

[英]Null Pointer exception when trying to cancel Progress Dialog in AsyncTask in android

我在取消異步任務中的“進度”對話框時遇到了空指針異常..這是我的代碼..我正在每周7天從RSS構造獲取數據。.我想取消該對話框並停止任務如果用戶按下“后退”按鈕。

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

嘗試更改showDialog(DIALOG_PROGRESS); 進入progressDialog.show();

您沒有在任何地方初始化weeklyScheduleScreen 另外,由於可以在沒有任何對象的情況下調用showDialog ,因此我的猜測是此AsyncTask嵌套在您的活動類中。 在這種情況下,您不需要weeklyScheduleScreen 只需將其更改為removeDialog(DIALOG_PROGRESS); (沒有weeklyScheduleScreen. )。

您應該檢查:

if (isCancelled())

在您的AsyncTask方法中,您應該考慮重寫AsyncTask的onCancelled方法以在適當的時候關閉進度對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM