2013-06-03 78 views
0

我想在onCancelled的AsyncTask中顯示AlertDialog。我的任務正常停止,但對話框沒有出現。這是我的代碼在下面...需要幫助。謝謝...Android AsyncTask AlertDialog不顯示

public class getWebPage extends AsyncTask<String, Integer, String> { 

protected void onPreExecute(String f) { 
    // TODO Setting up variables 
    f = "f"; 
} 

protected String doInBackground(String... params) { 
    // TODO Auto-generated method stub 
    Looper.prepare(); 
    DefaultHttpClient urlClient = new DefaultHttpClient(); 
    HttpGet getHtml = new HttpGet(PAGE_URL); 
    ResponseHandler<String> resHandler = new BasicResponseHandler(); 
    try { 
     String htmlPage = urlClient.execute(getHtml, resHandler); 
     Log.d("Html Page", htmlPage); 
     confessionsPage = new File(getApplicationContext().getFilesDir(), "ConfessionsPage.html"); 
     if (!confessionsPage.exists()) { 
      confessionsPage.createNewFile(); 
     } 
     writer = new PrintWriter(confessionsPage, "UTF-8"); 
     writer.print(htmlPage.replace("<!--", "").replace("-->", "")); 
     writer.flush(); 
     writer.close(); 

     Document doc = Jsoup.parse(confessionsPage, "UTF-8", "http://www.facebook.com/"); 
     if (doc.title().contains("Welcome to Facebook")) { 
      aDialog = new AlertDialog.Builder(OpeningActivity.this).create(); 
      aDialog.setTitle("Restricted Access"); 
      aDialog.setMessage("Looks like your Confessions Page only allows login access. You may be logged in right now, but the app" + 
        " can't. Tell your page admin to allow non-logged in access for your confessions page."); 
      aDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        aDialog.dismiss(); 
       } 
      }); 
      getWebPage.this.cancel(true); 
     } 

,這裏是我的方法取消:

@Override 
protected void onCancelled() { 
    // TODO Auto-generated method stub 
    super.onCancelled(); 
    aDialog.show(); 
} 
+0

從另一個線程執行UI操作,您需要使用父視圖的'post()'方法 – x4rf41

回答

0

嘗試移動一切從doInBackgroundonCancelled

因此,這將是您的onCancelled

AlertDialog aDialog = new AlertDialog.Builder(OpeningActivity.this).create(); 
aDialog.setTitle("Restricted Access"); 
aDialog.setMessage("Looks like your Confessions Page only allows login access. You may be logged in right now, but the app" + 
         " can't. Tell your page admin to allow non-logged in access for your confessions page."); 
aDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 
     aDialog.dismiss(); 
    } 
}); 
aDialog.show(); 

而且從doInBackground刪除一切。

或者,您也可以將其放入您的AsyncTaskonPostExecute,並將任務的結果類型更改爲Boolean。在onPostExecute檢查結果。如果它是假的,你需要顯示這個錯誤。從那裏顯示它。 請注意onPostExecute由UI線程執行,所以你不需要runOnUiThread的東西。

+0

據我所知,oncancelled在ui線程上運行...我錯了嗎? – stinepike

+0

@StinePike是的,我錯了。它已經在UI線程上。但也許問題是你必須從UI線程設置所有的AlertDialog選項。順便說一句,我沒有看到你在代碼中構建'aDialog'的地方。 –

+0

aDialog在活動類的開始以及所有其他變量中構建,在UI線程上 – SynerFlow