2012-07-25 72 views
1

在我的应用程序中,当我点击按钮时,它有时会显示progressdialog,有时不会显示clickd按钮上的progressdialog。异步任务不显示按钮上点击事件的进度对话框

异步任务的代码是:

public class LoadData extends AsyncTask<Void, Void, Void> 
    { 
     ProgressDialog pd; 
     @Override 
     protected void onPreExecute() 
     { 
      pd = ProgressDialog.show(MainActivity.this, "", "Loading..."); 
     } 
     @Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      MainActivity.this.runOnUiThread(new Runnable() { 

       public void run() { 
        // TODO Auto-generated method stub 
        LoadActivities(); // function to load data from url 

       } 
      }); 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Void unused) 
     { 
      pd.dismiss();  
     } 

    } 

和按钮单击事件称此为:

btn.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     new LoadMoreData().execute(null); 
    } 
}); 
+0

现在问题是progressdialog会在一段时间后打开,而不是单击事件之后。 – Sats 2012-07-25 09:06:38

回答

3

错误的思考你正在做的是在doInBackground你使用runOnUiThreade。只是从你的代码中删除。它解决了你的问题。

从不在doInBackground中使用任何线程。

1

为什么你已经采取再次运行方法doInBackground,doInBackground方法上进行运算后台线程,所以没必要拿runOnUiThread

 MainActivity.this.runOnUiThread(new Runnable() { 

      public void run() { 
       // TODO Auto-generated method stub 
       LoadActivities(); // function to load data from url 

      } 
     }); 

只要写

protected Boolean doInBackground(final String... args) { 
     try { 
      LoadActivities(); 
      return true; 
     } catch (Exception e) { 
      Log.e("tag", "error", e); 
      return false; 
     } 
    } 

,改变new LoadMoreData().execute();不写空

   btn.setOnClickListener(new View.OnClickListener() {  
       public void onClick(View v) { 
         new LoadMoreData().execute(); 
       }}); 
0

Nirali的答案似乎是正确的,只是为了进一步的解释和一些编辑。 进程对话框将在doInBackground方法返回值时显示。在你的代码,它只是创建另一个线程,并完成执行,所以在时间LoadActivities exectues显示进度对话框,在同一个线程执行该语句doInBackground执行,所以更改为以下几点:

@Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      MainActivity.this.runOnUiThread(new Runnable() { 

      LoadActivities(); // function to load data from url 
      return null; 
     }