2014-11-02 166 views
0

我有一個連接到servlet的android應用程序。如果servlet關閉(昨天發生在我身上),該應用程序崩潰。我需要彈出消息給用戶,通知有關連接問題,然後終止應用程序。Android,彈出消息異常

關於onCreate()方法,我調用了一個AsyncTask類,其中完成了與服務器的第一個連接。我有一個try/catch(UnknownHostException e)塊,如果sevlet關閉,它會被激活。 問題是我不能在那裏創建一個彈出消息。我嘗試吐司和AllertDialogs,但都返回異常

Java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

有沒有其他方法可以做到這一點?在此先感謝,ilias

回答

0

您可以設置一個布爾值並在函數調用後讀取它,此時您應該能夠顯示吐司/對話框。但是如果沒有其他代碼,這很難說。

0

您的AsyncTask正在後臺線程中運行。必須在主(UI)線程上進行調用以顯示ToastDialog。要從AsyncTask內做到這一點,你可以這樣做:

你需要的活動情境在你AsyncTask,所以有你的活動創建AsyncTask這樣的:

MyAsyncTask task = new MyAsyncTask(this, ...); // pass "this" so AsyncTask has an activity context 

在你AsyncTask構造函數,拯救活動場景,所以你可以在以後使用它:

private Activity activity; 

// Constructor 
MyAsyncTask(Activity activity, ...) { 
    this.activity = activity; 
    ... 
} 

當你要顯示一個對話框或一個麪包,確保代碼的主(UI)線程中運行:

// Here we want to Toast 
activity.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      // Do your Toast or Dialog stuff in here 
      ...   
     } 
}); 
+0

我不應該在AsyncTask上叫Toast,或者我不能!?我想了另一種方式,asynctask正在返回一個字符串。在catch中,我返回-1的值,所以在postexecute上檢查它是否爲-1,然後彈出消息 – 2014-11-02 16:59:09