在新的執行緒(Thread)中執行 Toast訊息提示

在Android當中若要在新的執行緒當中使用TOAST都會出現以下的錯誤訊【java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()】。若要可以正常執行請參閱以下解決方式。
首先必須先在Class當中宣告。
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
Toast.makeText(this.getApplicationContext(), msg.getData().getString("MESSAGE"), Toast.LENGTH_SHORT).show();
}
};

使用方式
public void Click()
{
final ProgressDialog pdialog = ProgressDialog.show(_activity, "Login", "登入中...", false);
new Thread()
{
public void run()
{
//加入此句
Looper.prepare();
//要執行的事情
new SocketClient(CreateXML()).run();
pdialog.dismiss();
//下面這裡是重點
Message status = handler.obtainMessage();
Bundle data = new Bundle();
data.putString("MESSAGE", "登入完畢");
status.setData(data);
handler.sendMessage(status);
Looper.loop();
}
}.start();
}

留言

  1. 請教大大 程式中 13行 new SocketClient(CreateXML()).run();的用意為何?

    回覆刪除
    回覆
    1. implements Runnable Class,可將需要做的事情寫在此處。
      可參考http://developer.android.com/reference/java/lang/Runnable.html說明

      刪除

張貼留言

您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。