2013-06-01 105 views
0

這是我的代碼。 我一直在使用Google搜索大約2個小時,並且我要瘋了。 我一直在做與網站上的所有示例完全一樣的內容,但它不會顯示,並且不會給我任何錯誤。Android ProgressDialog不會顯示在我的AsyncTask

我試圖在asyncTask中檢索網站源代碼,我想顯示對話框屏幕,並在完成時關閉它。

這是我的代碼:

public static class RetrieveSiteData extends AsyncTask<String, Void, String> { 
    private Context SubContext; 
    private ProgressDialog pd; 

    public RetrieveSiteData(Context SubContext){ 
     this.SubContext = SubContext; 
    } 

    @Override 
    protected void onPreExecute() { 
     pd = new ProgressDialog(this.SubContext); 
     pd.setTitle("Loading. Please wait..."); 
     pd.show(); 
     Log.v("Test","dit is het begin"); 
    } 


    @Override 
    protected String doInBackground(String... urls) { 
     StringBuilder builder = new StringBuilder(1000000); 


     for (String url : urls) { 
      Log.v("URLS",url); 
      if(url != "" && url != null){ 
       try {     
        HttpClient client = new DefaultHttpClient(); 
        HttpGet request = new HttpGet(url); 
        HttpResponse response = client.execute(request); 

        InputStream in = response.getEntity().getContent(); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
        String line = null; 
        while((line = reader.readLine()) != null) 
        { 
         builder.append(line); 
        } 
        in.close(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 


     return builder.toString(); 
    } 


    @Override 
    protected void onPostExecute(String result) { 
     pd.dismiss(); 
     Log.v("Test","dit is het eind"); 
    } 
} 
+0

DIT爲Het開始..顯示呢? – stinepike

+0

你的代碼在哪裏調用異步任務:'new RetrieveSiteData(SubContext).execute();' – MAC

+1

你的代碼適用於我。你確定它沒有很快解僱它嗎?所有的日誌消息都被調用了嗎?你在屏幕上還有什麼?您的環境設置是否正確? –

回答

0

儘量不要調用的AsyncTask的get()方法。它會阻塞ui線程,直到完成AsyncTask,並且爲什麼ProgressDialog不顯示。

+0

我會放棄一下,但我將如何檢索數據呢?我需要將它傳遞給我的腳本的下一部分。 –

+0

謝謝!這是有效的,但我如何從任務中檢索我的數據? –

+0

onPostExecute()用您在doInBackground()中返回的值調用,因此您可以在那裏獲取數據。 –

0

嘗試用那樣

@Override 
    protected void onPreExecute() { 

     pd = ProgressDialog.show(SubContext, "", "Loading. Please wait...", true); 

     Log.v("Test","dit is het begin"); 
    } 
+0

我正在執行片段中的代碼,但這仍然無效。 這是調用它的代碼: \t \t \t \t \t \t RetrieveSiteData retrieveSiteData =新RetrieveSiteData(getActivity()); \t \t \t \t \t \t字符串SHTML = retrieveSiteData.execute( 「http://www.myitemsale.co.uk/getMovies.php?q=」 + sTitle)獲得(); –

+0

OP的代碼有什麼問題? – Raghunandan

+0

你的意思是sunil嗎?我試了一下代碼,但它和我已有的完全一樣。它沒有顯示對話框。 這可能是因爲我使用標籤嗎?出於某種原因,它顯示在錯誤的屏幕上? –

0

只要把你的活動名稱

@Override 
protected void onPreExecute() { 
    pd = new ProgressDialog(Youractivityname.this); 
    pd.setTitle("Loading. Please wait..."); 
    pd.show(); 
    Log.v("Test","dit is het begin"); 
}