2013-05-21 70 views
1

我在按鈕的onclicklistener中定義了一個AsyncTask,並且一旦用戶單擊該按鈕,理想情況下進展對話框顯示,同時下載。用戶界面延遲顯示與asynctask

但是,進度對話框剛剛閃爍並在結果返回之前消失,並且按鈕在asynctask在後臺工作時獲得焦點。

有人可以幫我弄清楚我在這裏做錯了什麼嗎?代碼片段:

final ProgressDialog progressDialog = new ProgressDialog(context); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 

    ((Button)findViewById(R.id.buttonLoginActivity)).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AsyncTask<Void, Void, Void> downloadTask= new AsyncTask<Void, Void, Void>(){ 
       @Override 
       protected Void doInBackground(Void... params) { 
        String data = Service.getSomeData(); 
          context.getContentResolver.notifyChange("content://some_url"); 
         return null; 
       } 

       @Override 
       protected void onPostExecute(Void result) { 
        super.onPostExecute(result); 
        if(progressDialog== null) return; 
        if(progressDialog!=null) { 
         progressDialog.dismiss(); 
         progressDialog = null; 
        } 
       } 
      }; 

      progressDialog.show(); 

      downloadTask.execute(); 
      try{ 
       downloadTask.get(); 
      }catch(Exception e){ 
       e.printStackTrace(); 
       return; 
      } 
     } 
    }); 

回答

1

不要使用get()

downloadTask.get(); 

這是一個阻塞調用。來自Docs

如果需要等待計算完成,然後檢索其結果。

只需使用​​因爲你是那麼你需要在onPostExecute()

+0

異步任務,我就給在這一個鏡頭! – JUL

+0

好吧,您可能還有其他問題,但這是我第一次發現。讓我知道它是如何工作的 – codeMagic

+0

它的工作!但是你能否讓我知道你在這裏找到的其他問題?非常感謝! – JUL

0

的結果是什麼節目的progressDialog上需要被writen的onPreExecute,它會在後臺UI線程上運行,而不是(安卓4.0)

也是我稱之爲一個new Handler().post(myAsynctaskcaller)

@Override 
protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog.show(); 
} 
+0

感謝您的建議。下次我會試試這個。乾杯! – JUL