[英]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.