0

我有一個AsyncTask需要URL並獲取所有通過的url的內容長度。我希望在標題欄中更新進度欄,並在獲取最終值時顯示警告框。但我無法理解如何使這一切功能在一起。我現在的代碼移動了進度條,但不會顯示警告框。我沒有自定義標題欄,而是調用requestWindowFeature(FEATURE_PROGRESS)。任何幫助,將不勝感激。無法使publishProgress正常工作。幫幫我?

這是我的異步類

private class MyClass extends AsyncTask<URL, Integer, Float> 
    { 
     protected Float doInBackground(URL... urls) 
     { 
       try 
       { 
       for(int i = 0; i<urls.length; i++) 
       { 
        url = urls[i]; 
        urlConnection = (HttpURLConnection) url.openConnection(); 
        urlConnection.setRequestMethod("GET"); 
        urlConnection.setDoOutput(true); 
        urlConnection.connect(); 
        size = urlConnection.getContentLength(); 
        total += size; 
        while(progress<total) 
        { 
         progress++; 
         publishProgress(progress); 
        } 

       } 
      } 
      catch(MalformedURLException e) 
      { 
       e.printStackTrace(); 
      } 
      catch(IOException iox) 
      { 
       iox.printStackTrace(); 
      } 
      finally 
      { 
       urlConnection.disconnect(); 
      } 
       return total; 
    } 

     protected void onProgressUpdate(Integer... values) 
     { 
     setProgressBarVisibility(true); 
     setProgress(values[0]);  
    } 

編輯:據我所知,從publishProgress doInBackground方法將數據傳送給onProgressUpdate。但是通過上面的代碼,所有的url內容長度都被添加到「total」中。我認爲上面的代碼是正確的。我的這個實現是:從主類中按下一個按鈕。該按鈕將所有的url傳遞給AsyncTask。當網址獲得長度並添加到總數(在後臺)時,標題欄中會出現一個進度條,直到完成後臺工作。然後警報對話框提示用戶選擇。

雖然進度條到達最後並且警告對話框不顯示,但是發生了什麼。在我開始添加此進度條之前,顯示了警報對話框。現在它不。我怎樣才能讓進度條正確增加url內容長度....關閉進度條.....然後在onPostExecute中加載提醒對話框?

protected void onPostExecute(final Float result) 
    {  

     setProgressBarVisibility(false); 

     AlertDialog.Builder alertbox = new AlertDialog.Builder(Vacation.this); 
     alertbox.setMessage(TEXT STUFF); 
     alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface arg0, int arg1) 
      { 

      } 
     }); 
     alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface arg0, int arg1) 
      { 

      } 
     }); 
     alertbox.show();  

    } 
+0

我沒有看到代碼中,你試圖顯示警報對話框? – sat

+0

alertdialog發生在onPostExecute中。 – Java00011111

回答

0

坐是正確的但你能做到這一點,其中具有UI線程訪問onPostExecute()梅索德永遠記住只有doInBackground()不具有UI線程訪問,其餘全部3梅索德了。如果您需要的不僅僅是特定的內容,而且還會顯示您發現問題的代碼。

相關問題