原文引用←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」中執行。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 JoshJhan 的頭像
    JoshJhan

    Josh Do It_iOS & Android Developers

    JoshJhan 發表在 痞客邦 留言(0) 人氣()