【发布时间】:2012-08-02 01:10:36
【问题描述】:
我有两个不工作的 AsyncTask。我做错了一定有一些共同点。
我的第一个活动需要很长时间才能加载,所以我希望有一个 progressDialog/Bar,但它失败了。我在我的 onCreate 中访问了一个 AsyncTask
new HeavyWorker(this).execute();
public class HeavyWorker extends AsyncTask < String , Context , Void > {
private ProgressDialog progressDialog ;
private Context targetCtx ;
public HeavyWorker ( Context context ) {
this.targetCtx = context ;
// this.needToShow = true;
progressDialog = new ProgressDialog ( targetCtx ) ;
progressDialog.setCancelable ( false ) ;
progressDialog.setMessage ( "Retrieving data..." ) ;
progressDialog.setTitle ( "Please wait" ) ;
progressDialog.setIndeterminate ( true ) ;
}
@ Override
protected void onPreExecute ( ) {
progressDialog.show ( ) ;
}
@ Override
protected Void doInBackground ( String ... params ) {
// Do Your WORK here
下面的这些行在正常情况下工作正常
“public void onCreate(Bundle savedInstanceState)”区域
Ls = new LoadSettings(CreateAppointment.this);
gs = new GlobalSubs();
TimeZoneList();
此行动态填充 Spinner 框并使其停止工作,因此我将其注释掉。
// createTimezone();
ZoneList(Ls.getCountryZone());
这一行也动态填充了一个微调框,所以我把它注释掉了
// createZone();
InitialiseUI();
CreateFileName();
return null ;
}
这个区域从未到达过?
@ Override
protected void onPostExecute ( Void result ) {
if(progressDialog != null && progressDialog.isShowing()){
progressDialog.dismiss ( ) ;
}
}
}
我的第二页因同样的问题而失败。
我还尝试在设置页面中使用稍微不同的代码。
现已修复:
//
private class MyClass extends AsyncTask<Void, Void, Void>{
ProgressDialog mProgressDialog;
public MyClass(){
mProgressDialog = new ProgressDialog(Preferences.this);
mProgressDialog.setMessage ("Please Wait While Saving");
mProgressDialog.setTitle("Saving");
//
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.show(Preferences.this, "Saving", "Please Wait a Sec");
}
@Override
protected Void doInBackground(Void... params)
{
saveSettings();
return null;
}
@Override
protected void onPostExecute(Void unused) {
唯一可行的方法是当我注释掉该行并更改为不同的活动时
// mProgressDialog.dismiss();
Toast.makeText(Preferences.this, "Your Settings Where Saved.", Toast.LENGTH_SHORT).show();
gotoMainPage();
}
}
private void gotoMainPage(){
Intent a = new Intent(this, Main_entry.class);
finish();
startActivity(a);
}
【问题讨论】:
-
能否在不中断发布代码的情况下描述您的问题?几乎无法理解您的 ASyncTask 是如何实现的。
标签: java android android-asynctask android-progressbar