原文引用←Jiang Ying-Fu的部落格
private static final int Thread1 = 0x101; //自訂事件ID
private static final int Thread2 = 0x102; //自訂事件ID
//可以再新增
private static String ResultMsg = ""; //宣告一變數承接Thread要向外傳的值。
/*
自定OnClick事件
此事件會使用HttpPost向Web取得資料。
*/
private OnClickListener btn_click = new OnClickListener ( ) {
public void onClick ( View v ) {
Thread thread = new Thread() {
@Override
public void run ( ) {
Message msg = new Message ( ) ;
String url = "http網址";
HttpPost hp = new HttpPost ( url ) ;
List < NameValuePair > params = new ArrayList < NameValuePair > ( ) ;
params.add ( new BasicNameValuePair ( "id" , "Frank") ) ;
try{
hp.setEntity ( new UrlEncodedFormEntity ( params , HTTP.UTF_8 ) ;
HttpResponse hr = new DefaultHttpClient ( ) . execute ( hp ) ;
String Result = EntityUtils.ToString ( hr.getEntity ( ) ) ;
ResultMsg = Result ; //將接收回來的字串放至 ResultMsg 變數中。
msg.what = Thread1 ; //設定 Handler 要接收的事件ID
ActivityClassName.this.myMessageHandler.sendMessage ( msg ) ; //送出事件訊息
}
};
thread.start ( ) ; //啟動執行緒
}
};
/*
自定Handler
所有透過 myMessageHandler.sendMessage 方法的 事件訊息
都會到這集合並至 public void handleMessage ( Message msg ) 中執行
*/
Handler myMessageHandler = new Handler ( ) {
@Override
public void handleMessage ( Message msg ) {
switch ( msg.what )
{
case GUI_OK :
TextView txtmsg = ( TextView ) findViewById ( R.id.txtmsg ) ;
txtmsg.setText ( ResultMsg ) ;//從網頁索取到的文字顯示在此
break;
}
}
}
Thread 規定不能使用到Layout畫面上的物件,所以只能透過其他的變數去承接。
以上是簡單的舉例,其他複雜的程式,一樣要使用此方法來解決。
同時盡量把一些需花時間處理的程式,放至「Thread」中執行。