2011-10-18 39 views
1

我有一個問題。我有一個asynctask,其中我連接到一個Web服務,將數據放入數據庫。這沒關係,它的工作原理。但我有一個問題,我想單擊REFRESH(多數民衆贊成時,我做的Web服務)後,進度條..Android - 用webservice緩慢ProgressDialog AsyncTask

當我刷新,需要2秒,而我的屏幕凍結,然後開始進度條稍稍消失,但是在進度條開始之前完成。

這裏是的AsyncTask的代碼

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> { 
     private static final String DEBUG_TAG = "actualizo"; 
     private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this); 

     @Override 
     protected void onCancelled() { 
      Log.i(DEBUG_TAG, "onCancelled"); 

       pd.dismiss(); 

     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      Log.i(DEBUG_TAG, "onPostExecute"); 

       pd.dismiss(); 

     } 

     @Override 
     protected void onPreExecute() { 

      pd.setMessage("Actualizando..."); 
      pd.show(); 


     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 



     } 
     @Override 
     protected Boolean doInBackground(Void... params) { 


      webService(); 

      tv2 = resultado.toString();   //Obtengo el string resultado del WebService en tv2 

      //Obtengo la hora actual 

      insertoEnBD(); 
      // Inserto en base de datos (Si es que pase por el Web Service) 
      Boolean res = true; 
      return res; 



     } 







    } 

Webservice的是Web服務的連接如的方法,而「InsertoBD」是,當我把數據導入數據庫..感謝

+0

我看不出有什麼錯在你的AsyncTask實現,如何你是否知道你的任務在進度條開始之前完成。根據你的描述,除了2秒的凍結,我會說這是我的期望從你的AsyncTask:進度條顯示 - >任務快速完成 - >進度條被駁回。 – yorkw

+0

因爲我的UI是刷新和更改數據..後,我看到進度條開始.. –

+0

我會建議註釋掉doInBackground()中的所有代碼,並簡單地做一個Log.i(標籤,「做某事」)看看UI刷新是否實際來自你的doInBackground()。通過這樣做,您還可以檢查Logcat以查看是否在onPreExecute()之後調用doInBackground()。我想你的代碼中可能還有其他地方在主線程中執行同樣繁重的任務,這解釋了單擊刷新按鈕時2秒鐘凍結。 – yorkw

回答

0

試着改變方式您實例化ProgressDialog這樣:

 @Override 
    protected void onPreExecute() { 
     pd = ProgressDialog.show(context, "", "My text is here..."); 
    } 

請注意,如果你只使用模擬器進行測試,ProgressDialogs可以在出現慢/消失意味着你的如果您在設備上測試,問題可能不存在。

+0

我在設備上測試它,我有同樣的問題.. –

0

我建議你在你的環境Activity中聲明ProgressDialog。然後你可以試試這個代碼。它爲我的作品:

其中的AsyncTask聲明

環境類:

private ProgressDialog dialog; 

... 

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> { 
     private static final String DEBUG_TAG = "actualizo"; 

... 
@Override 
     protected void onPreExecute() { 

        pd = new ProgressDialog(ShamanOperativoActivity.this); 

      pd = ProgressDialog.show(getParent().getParent(), "Wait", 
        "Loading..."); 


     } 
... 
+0

我不能理解這一點,我在我的課堂上聲明對話,然後我在我的asynctask類中使用pd?我試過這段代碼,它顯示了一個由nullpointer異常關閉的強制.. –

+0

你必須將兩個類放在同一個.java文件中。 – atzu

0

嘗試這些一個.....

private class tareaActualizar extends AsyncTask<Void, Void, Void> 

{ 

private static final String DEBUG_TAG = "actualizo"; 

     private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this); 

     protected void onPreExecute() { 
       pd.setMessage("Actualizando..."); 
      pd.show(); 

     } 

     protected Void doInBackground(Void... para) { 

       webService(); 

      tv2 = resultado.toString();   //Obtengo el string resultado del WebService en tv2 

      //Obtengo la hora actual 

      insertoEnBD(); 
      // Inserto en base de datos (Si es que pase por el Web Service) 
      Boolean res = true; 
      return res; 


     } 

     protected void onPostExecute(Void params) { 

       pd.dismiss(); 

     } 
    }