2011-05-13 51 views
6

我需要在android裏顯示Asynctask裏面的Alertdialog,但是它在throws異常中不能顯示。android中的asynctask裏面的alert對話框

05-13 14:59:35.522: WARN/System.err(1179): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

謝謝。

回答

12

不可能從後臺線程操縱UI。使用處理程序或AsyncTask的onPre/Post方法。

2

我認爲this可能是您的問題 - 您無法在doInBackground中顯示對話框。

3

在onPostExecute()方法而不是doInBackground中顯示對話框。

希望幫助

0

您可以直接從doInBackground()調用publishProgress()和onProgressUpdate與UI操作()。

2

從backGround線程到達UI線程沒有問題(更清晰:從doInBackground()方法):您只需在您的上下文中運行runOnUiThread()方法。在我的情況下,我從doInBackground()身上調用它。

ContactsViewerActivity.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        AlertDialog.Builder builder = new AlertDialog.Builder(ContactsViewerActivity.this); 
         builder.setTitle("Connection problem..") 
         .setMessage("Could not connect to " + url + ", " + 
           "try changing your host in the settings to default one :" + 
           getResources().getString(R.string.default_server_ip) + ":" + 
           getResources().getString(R.string.default_server_port)) 
         .setNegativeButton("OK", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 
          } 
         }); 
         AlertDialog alert = builder.create(); 
         alert.show(); 
       } 
      });