專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13
用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應
程式碼 : package com.example.phone; import java.util.arraylist; import java.util.list; import org.apache.http.httpresponse; import org.apache.http.namevaluepair; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.apache.http.message.basicnamevaluepair; import org.apache.http.protocol.http; import org.apache.http.util.entityutils; import android.app.activity; import android.os.bundle; import android.os.handler; import android.os.message; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.toast; public class MainActivity extends Activity implements OnClickListener private Button button1; private Button button2; private Button button3; private Button button4; private Button button5; private Button button6; private Button button7; private Button button8; private Button button9; private Button button10;
private Button button11; private Button button12; private Button button13; private Button button14; private String uriapi = "http://140.134.30.89/httpposttest.php"; /** 要更新版面 的訊息代碼 */ protected static final int REFRESH_DATA = 0x00000001; /** 建立 UI Thread 使用的 Handler, 來接收其他 Thread 來的訊息 */ Handler mhandler = new Handler() @Override public void handlemessage(message msg) switch (msg.what) // 顯示網路上抓取的資料 case REFRESH_DATA: String result = null; Toast.LENGTH_LONG).show(); if (msg.obj instanceof String) result = (String) msg.obj; if (result!= null) // 印出網路回傳的文字 Toast.makeText(MainActivity.this, result, ; @Override public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main); button1 = (Button) findviewbyid(r.id.button1); button2 = (Button) findviewbyid(r.id.button2); button3 = (Button) findviewbyid(r.id.button3); button4 = (Button) findviewbyid(r.id.button4); button5 = (Button) findviewbyid(r.id.button5); button6 = (Button) findviewbyid(r.id.button6); button7 = (Button) findviewbyid(r.id.button7); button8 = (Button) findviewbyid(r.id.button8); button9 = (Button) findviewbyid(r.id.button9); button10 = (Button) findviewbyid(r.id.button10); button11 = (Button) findviewbyid(r.id.button11); button12 = (Button) findviewbyid(r.id.button12); button13 = (Button) findviewbyid(r.id.button13); button14 = (Button) findviewbyid(r.id.button14); @Override public void onclick(view v) int key=v.getid(); switch (key) case R.id.button1: String a = "1"; Thread aa = new Thread(new sendpostrunnable(a)); aa.start(); case R.id.button2: String b = "2";
Thread bb = new Thread(new sendpostrunnable(b)); bb.start(); case R.id.button3: String c = "3"; Thread cc = new Thread(new sendpostrunnable(c)); cc.start(); case R.id.button4: String d = "4"; Thread dd = new Thread(new sendpostrunnable(d)); dd.start(); case R.id.button5: String e = "5"; Thread ee = new Thread(new sendpostrunnable(e)); ee.start(); case R.id.button6: String f = "6";
Thread ff = new Thread(new sendpostrunnable(f)); ff.start(); case R.id.button7: String g = "7"; Thread gg = new Thread(new sendpostrunnable(g)); gg.start(); case R.id.button8: String h = "8"; Thread hh = new Thread(new sendpostrunnable(h)); hh.start(); case R.id.button9: String i = "9"; Thread ii = new Thread(new sendpostrunnable(i)); ii.start(); case R.id.button10: String j = "10";
Thread jj = new Thread(new sendpostrunnable(j)); jj.start(); case R.id.button11: String k = "11"; Thread kk = new Thread(new sendpostrunnable(k)); kk.start(); case R.id.button12: String l = "12"; Thread ll = new Thread(new sendpostrunnable(l)); ll.start(); case R.id.button13: String m = "13"; Thread mm = new Thread(new sendpostrunnable(m)); mm.start(); case R.id.button14: String n = "14";
Thread nn = new Thread(new sendpostrunnable(n)); nn.start(); class sendpostrunnable implements Runnable String strtxt = null; // 建構子, 設定要傳的字串 public sendpostrunnable(string strtxt) this.strtxt = strtxt; @Override public void run() String result = sendpostdatatointernet(strtxt); mhandler.obtainmessage(refresh_data, result).sendtotarget(); private String sendpostdatatointernet(string strtxt) // 建立 HTTP Post 連線 HttpPost httprequest = new HttpPost(uriAPI);
//Post 運作傳送變數必須用 NameValuePair[] 陣列儲存 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("data", strtxt)); try // 發出 HTTP request httprequest.setentity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // 取得 HTTP response 200) HttpResponse httpresponse = new DefaultHttpClient().execute(httpRequest); // 若狀態碼為 200 ok if (httpresponse.getstatusline().getstatuscode() == // 取出回應字串 String strresult = EntityUtils.toString(httpResponse.getEntity()); // 回傳回應字串 return strresult; catch (Exception e) e.printstacktrace(); return null;