這裏是我的代碼:的AsyncTask無法調用doInBackground方法
new Loading.LoadTast(ctx) {
@Override
protected String doInBackground(Integer... params) {
Looper.prepare();
String msg=changePwd();
closeProgressDialog();
if(msg == null) {
SmartNgApplication.getInstance().exit();
} else {
BaseHelper.showToast(ctx, msg);
}
Looper.loop();
return null;
}
}.execute();
public abstract static class LoadTast extends AsyncTask<Integer, Integer, String> {
private ProgressDialog progressDialog;
private Context ctx;
public LoadTast(Context ctx) {
this.ctx=ctx;
}
protected abstract String doInBackground(Integer... params);
public void onPreExecute() {
super.onPreExecute();
progressDialog=ProgressDialog.show(ctx, "", "loading...", true, false);
}
public void onPostExecute(String result) {
super.onPostExecute(result);
progressDialog.dismiss();
BaseHelper.showToast(ctx, result);
}
}
點擊按鈕運行的方法。點擊它5次AsyncTask.onPreExecute
被稱爲但不叫doInBackground
所以屏幕仍然顯示一個對話框。
我覺得有AsyncTask
THREAD_POOL_EXECUTOR
爲什麼覆蓋'doInBackground()'方法如此重要?爲什麼不把它放在'AsyncTask'內? –
因爲在許多Class中調用了新的Loading.LoadTast(ctx),而且我不想在每個類上寫PreExecute方法 – Sunxc
您不必?一旦你創建了你的課程,那麼你所需要做的就是調用'新的LoadTast。execute([int params]);'另外,你需要聲明你的'AsyncTask'將使用哪些變量,例如'public abstract static class LoadTast extends AsyncTask <'','Integer,Void> {' –