綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 關於表單的傳送在android應用

[複製連結] 查看: 1673|回覆: 3|好評: 0
跳轉到指定樓層
樓主
hl2dm | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2012-10-26 19:22

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
大家好
我是剛學java沒多久
正在摸索android的初學者
最近剛好在公司上班發現
公司的一台控制器是利用表單來進行控制
也就是說POST出去的資料
(
<form method="post" action="http://xxx.xx.80.132/OPENDOOR">
  <p align="right">
    <input type="submit" name="DOOR" value="開門">
)
會影響控制器的動作
老闆說這雖然跟你的職務內容無關
但是你可以玩玩看沒關係
安卓上操作該怎麼做呢?
google了一下看到某鄉民的部落格
根據他的範例:http://0rz.tw/xPRGe

我更改了private String uriAPI = "http://192.168.1.3/httpPostTest.php";

改為private String uriAPI = "http://xxx.xx.80.132/OPENDOOR";

params.add(new BasicNameValuePair("data", strTxt));

params.add(new BasicNameValuePair("data", strTxt));

改為params.add(new BasicNameValuePair("DOOR", strTxt));

然後進行測試都顯示HOST NAME NOT BE NULL

完全不知道怎麼弄lol
因為我只有基礎的asp跟HTML加上剛學的JAVA概念而已
有沒有版友可以指引我一下的orz

對於傳值根處理回傳值我根本不知道該從何下手

感激不盡
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
 樓主| hl2dm | 收聽TA | 只看該作者
發表於 2012-10-28 19:45
我有試著找了網路上兩個範例來測試
不過很明顯的都失敗orz
希望版友能給些幫助
這是壹號方法
按鈕按下去之後沒有任何反應
不知道有沒有正確動作
伺服器那邊似乎也沒有紀錄


  1. public class MainActivity extends Activity implements OnClickListener

  2. {

  3. private EditText txtMessage;
  4. private EditText txtMessage2;
  5. private Button sendBtn;

  6. private String uriAPI = "http://119.14.80.132/ACT_ID_1";

  7. /** 「要更新版面」的訊息代碼 */

  8. protected static final int REFRESH_DATA = 0x00000001;



  9. /** 建立UI Thread使用的Handler,來接收其他Thread來的訊息 */

  10. Handler mHandler = new Handler()

  11. {

  12. @Override

  13. public void handleMessage(Message msg)

  14. {

  15. switch (msg.what)

  16. {

  17. // 顯示網路上抓取的資料

  18. case REFRESH_DATA:

  19. String result = null;

  20. if (msg.obj instanceof String)

  21. result = (String) msg.obj;

  22. if (result != null)

  23. // 印出網路回傳的文字

  24. Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();

  25. break;

  26. }

  27. }

  28. };



  29. @Override

  30. public void onCreate(Bundle savedInstanceState)

  31. {



  32. super.onCreate(savedInstanceState);

  33. setContentView(R.layout.activity_main);



  34. txtMessage = (EditText) findViewById(R.id.editText1);
  35. txtMessage2 = (EditText) findViewById(R.id.editText2);
  36. sendBtn = (Button) findViewById(R.id.button1);



  37. if (sendBtn != null)

  38. sendBtn.setOnClickListener(this);

  39. }



  40. @Override

  41. public void onClick(View v)



  42. {

  43. if (v == sendBtn)

  44. {

  45. if (txtMessage != null)

  46. {

  47. // 擷取文字框上的文字

  48. String msg = txtMessage.getEditableText().toString();
  49. String msg2 = txtMessage2.getEditableText().toString();
  50. // 啟動一個Thread(執行緒),將要傳送的資料放進Runnable中,讓Thread執行

  51. Thread t = new Thread(new sendPostRunnable(msg));
  52. Thread a = new Thread(new sendPostRunnable(msg2));
  53. t.start();


  54. }

  55. }

  56. }



  57. private String sendPostDataToInternet(String strTxt)

  58. {



  59. /* 建立HTTP Post連線 */



  60. HttpPost httpRequest = new HttpPost(uriAPI);

  61. /*

  62. * Post運作傳送變數必須用NameValuePair[]陣列儲存

  63. */

  64. List<NameValuePair> params = new ArrayList<NameValuePair>();



  65. params.add(new BasicNameValuePair("username", "abc"));
  66. params.add(new BasicNameValuePair("pwd", "654321"));


  67. try



  68. {



  69. /* 發出HTTP request */



  70. httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

  71. /* 取得HTTP response */

  72. HttpResponse httpResponse = new DefaultHttpClient()

  73. .execute(httpRequest);

  74. /* 若狀態碼為200 ok */

  75. if (httpResponse.getStatusLine().getStatusCode() == 200)

  76. {

  77. /* 取出回應字串 */

  78. String strResult = EntityUtils.toString(httpResponse

  79. .getEntity());

  80. // 回傳回應字串

  81. return strResult;

  82. }

  83. } catch (Exception e)

  84. {

  85. e.printStackTrace();

  86. }

  87. return null;

  88. }



  89. class sendPostRunnable implements Runnable

  90. {

  91. String strTxt = null;
  92. String strTxt2 = null;


  93. // 建構子,設定要傳的字串

  94. public sendPostRunnable(String strTxt)

  95. {

  96. this.strTxt = strTxt;

  97. }



  98. @Override

  99. public void run()

  100. {

  101. String result = sendPostDataToInternet(strTxt);

  102. mHandler.obtainMessage(REFRESH_DATA, result).sendToTarget();
  103. Intent open =new  Intent();
  104. open.setClass(MainActivity.this,op.class);
  105. startActivity(open);
  106. }



  107. }



  108. }
複製代碼
貳號方法
碰到的問題是
按下送出之後
都被連線拒絕
我查了一下可能是
因為沒有加上 <uses-permission android:name="android.permission.INTERNET" />
但是我加上去之後在按鈕按下的同時程式就會崩潰


  1. public class Main extends Activity implements OnClickListener

  2. {

  3. private EditText txtMessage;

  4. private Button sendBtn;



  5. private String uriAPI = "http://119.14.80.132/ACT_ID_324";


  6. @Override

  7. public void onCreate(Bundle savedInstanceState)

  8. {

  9. super.onCreate(savedInstanceState);

  10. setContentView(R.layout.main);



  11. txtMessage = (EditText) findViewById(R.id.editText1);

  12. sendBtn = (Button) findViewById(R.id.button1);



  13. if (sendBtn != null)

  14. {

  15. sendBtn.setOnClickListener(this);

  16. }




  17. }



  18. @Override

  19. public void onClick(View v)

  20. {

  21. if (v == sendBtn)

  22. {

  23. String msg = null;

  24. if (txtMessage != null)

  25. {

  26. msg = txtMessage.getEditableText().toString();

  27. String result = sendPostDataToInternet(msg);

  28. if (result != null)

  29. Toast.makeText(this, result, Toast.LENGTH_LONG).show();

  30. }

  31. }

  32. }



  33. private String sendPostDataToInternet(String strTxt)

  34. {


  35. HttpPost httpRequest = new HttpPost(uriAPI);

  36. List<NameValuePair> params = new ArrayList<NameValuePair>();

  37. params.add(new BasicNameValuePair("USX0", strTxt));

  38. try

  39. {

  40. /* 發出HTTP request */

  41. httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

  42. /* 取得HTTP response */

  43. HttpResponse httpResponse = new DefaultHttpClient()

  44. .execute(httpRequest);

  45. /* 若狀態碼為200 ok */

  46. if (httpResponse.getStatusLine().getStatusCode() == 200)

  47. {

  48. /* 取出回應字串 */

  49. String strResult = EntityUtils.toString(httpResponse

  50. .getEntity());



  51. // 回傳回應字串

  52. return strResult;

  53. }



  54. } catch (ClientProtocolException e)

  55. {

  56. Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)

  57. .show();

  58. e.printStackTrace();

  59. } catch (IOException e)

  60. {

  61. Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)

  62. .show();

  63. e.printStackTrace();

  64. } catch (Exception e)

  65. {

  66. Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)

  67. .show();

  68. e.printStackTrace();

  69. }

  70. return null;

  71. }



  72. }
複製代碼
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
ploglin | 收聽TA | 只看該作者
發表於 2012-10-29 12:34
要加上
<uses-permission android:name="android.permission.INTERNET" />
才有權限可以存取網路。

程式異常的話,就把 LogCat 的 Error Message 貼上來看看吧
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
 樓主| hl2dm | 收聽TA | 只看該作者
發表於 2012-10-29 20:17
我一下班就重回家開始測試了
這是Locat出來的東西

然後在執行到Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_SHORT)
debug裝置有幫我停住他
然後我按繼續

跳出這段logcat
  1. 10-29 20:08:30.620: I/ActivityManager(1849): Killing proc 20755:com.example.asd/10151: force stop
  2. 10-29 20:08:30.880: W/ActivityThread(20966): Application com.example.asd is waiting for the debugger on port 8100...
  3. 10-29 20:08:47.360: E/AndroidRuntime(20966):         at com.example.asd.MainActivity.sendPostDataToInternet(MainActivity.java:208)
  4. 10-29 20:08:47.360: E/AndroidRuntime(20966):         at com.example.asd.MainActivity.onClick(MainActivity.java:117)
複製代碼
debug上還會跳出ZygoteInit$MethodAndArgsCaller.run() line: 986       
還有一個頁面上面寫Source not found
按鈕上面寫Edit Source Lookup Path
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則