在新的執行緒(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,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。