上方廣告

Lady Kukki 手作糖霜餅乾

2011年10月21日 星期五

在新的執行緒(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();
}