Android POST GET請求

來源:互聯網
上載者:User

Android POST GET請求

Android應用經常會和伺服器端互動,這就需要手機用戶端發送網路請求,下面介紹常用的兩種網路請求方式POST,GET。首先要區別POST和GET請求
1. GET是從伺服器上擷取資料,POST是向伺服器傳送資料。
2. GET是把參數資料隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。POST是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程
3. GET方式提交的資料最多隻能是1024位元組,理論上POST沒有限制,可傳較大量的資料
4. GET安全性非常低,POST安全性較高。但是執行效率卻比POST方法好。

下面分別用Post和GET方法來實現Android應用的人員登入,首先我們搭建一個伺服器,這裡我使用WAMP環境,使用ThinkPHP架構。詳細的伺服器搭建就不說了。給出主要響應代碼:
  1. namespace Home\Controller;
  2. use Think\Controller;
  3. class AndroidController extends Controller {
  4. public function index()
  5. {
  6. //擷取帳號密碼
  7. $id=I('username');
  8. $pwd=I('password');
  9. $User=M('user');
  10. //查詢資料庫
  11. $data = $User->where("NAME='$id' AND PASSWORD='$pwd' ")->find();
  12. //登入成功
  13. if($data)
  14. {
  15. $response = array('success' => true,'msg'=>'登入成功');
  16.  
  17. $response=json_encode($response);
  18. echo $response;//返回json格式
  19. }
  20. //登入失敗
  21. else
  22. {
  23. $response = array('success' => false,'msg'=>'帳號或密碼錯誤');
  24. $response=json_encode($response);
  25. echo $response;//返回json格式
  26. }
  27. }
  28.  
  29. } 複製代碼 記得添加網路許可權 Android的網路請求主要使用java.net包中的HttpURLConnection類,伺服器與Android用戶端資料互動格式為json 1.利用POST請求方式來實現人員登入。
    1. package com.dream.apm;
    2.  
    3. import android.app.Activity;
    4. import android.content.pm.ActivityInfo;
    5. import android.os.Bundle;
    6. import android.os.Handler;
    7. import android.os.Looper;
    8. import android.os.Message;
    9. import android.view.View;
    10. import android.view.Window;
    11. import android.view.WindowManager;
    12. import android.widget.Button;
    13. import android.widget.EditText;
    14. import android.widget.LinearLayout;
    15. import android.widget.Toast;
    16. import org.json.JSONArray;
    17. import org.json.JSONException;
    18. import org.json.JSONObject;
    19.  
    20. import java.io.*;
    21. import java.net.HttpURLConnection;
    22. import java.net.MalformedURLException;
    23. import java.net.URL;
    24. import java.net.URLEncoder;
    25.  
    26. public class MyActivity extends Activity {
    27.  
    28. //請求地址
    29. private static String url="http://10.0.2.2:8080/think/index.php/Home/Android";
    30. public Button start;
    31.  
    32. public EditText username,password;
    33.  
    34. public URL http_url;
    35.  
    36. public String data;
    37.  
    38. public Handler handler;
    39.  
    40. @Override
    41. public void onCreate(Bundle savedInstanceState){
    42. super.onCreate(savedInstanceState);
    43. //設定全屏
    44. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    45. WindowManager.LayoutParams.FLAG_FULLSCREEN);
    46. //去除應用程式標題
    47. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    48. //設定豎屏
    49. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    50. setContentView(R.layout.main);
    51.  
    52. start=(Button)findViewById(R.id.start_one);
    53. username=(EditText)findViewById(R.id.username);
    54. password=(EditText)findViewById(R.id.password);
    55. //訊息處理器
    56.  
    57. handler=new Handler(Looper.getMainLooper())
    58. {
    59. @Override
    60. public void handleMessage(Message msg)
    61. {
    62. super.handleMessage(msg);
    63. switch(msg.what)
    64. {
    65. //登入成功
    66. case 1:
    67. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
    68. Toast.LENGTH_SHORT).show();
    69. break;
    70. //登入失敗
    71. case 2:
    72. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
    73. Toast.LENGTH_SHORT).show();
    74. break;
    75.  
    76. }
    77. }
    78. };
    79.  
    80. start.setOnClickListener(new View.OnClickListener() {
    81. @Override
    82. public void onClick(View v) {
    83. //是否輸入帳號密碼
    84. if(username.getText().toString().length()>0&&password.getText().toString().length()>0){
    85. //子線程可以擷取UI的值,不能更改
    86. new Thread(new Runnable() {
    87. @Override
    88. public void run() {
    89. try {
    90. http_url=new URL(url);
    91. if(http_url!=null)
    92. {
    93. //開啟一個HttpURLConnection串連
    94. HttpURLConnection conn = (HttpURLConnection) http_url.openConnection();
    95. conn.setConnectTimeout(5* 1000);//設定連線逾時
    96. conn.setRequestMethod("POST");//以get方式發起請求
    97. //允許輸入輸出資料流
    98. conn.setDoInput(true);
    99. conn.setDoOutput(true);
    100. conn.setUseCaches(false);//使用Post方式不能使用緩衝
    101. //擷取帳號密碼
    102. String params = "username=" + username.getText().toString()
    103. + "&password=" + password.getText().toString();
    104. //佈建要求體的類型是文本類型
    105. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    106. //佈建要求體的長度--位元組長度
    107. conn.setRequestProperty("Content-Length",String.valueOf(params.getBytes().length) );
    108. //發送post參數
    109. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
    110. bw.write(params);
    111. bw.close();
    112. //接收伺服器響應
    113. if (conn.getResponseCode() == 200) {
    114. InputStream is = conn.getInputStream();//得到網路返回的輸入資料流
    115. BufferedReader buf=new BufferedReader(new InputStreamReader(is));//轉化為字元緩衝流
    116. data=buf.readLine();
    117. buf.close();is.close();
    118. //判斷登入結果
    119. analyse(data);
    120. }
    121. }
    122. } catch( Exception e) {
    123. e.printStackTrace();
    124. }
    125. }
    126. }).start();
    127. }
    128. else
    129. {
    130. Toast.makeText(MyActivity.this, "請完整輸入帳號密碼",
    131. Toast.LENGTH_SHORT).show();
    132. }
    133. }
    134. });
    135. }
    136.  
    137. public void analyse (String data)
    138. {
    139. System.out.println(data);
    140. try {
    141. JSONObject json_data=new JSONObject(data);
    142. Boolean state=json_data.getBoolean("success");
    143. String msg=json_data.getString("msg");
    144. //登入成功
    145. if(state)
    146. {
    147. //發送訊息
    148. Message message= new Message();
    149. message.what=1;
    150. Bundle temp = new Bundle();
    151. temp.putString("msg",msg);
    152. message.setData(temp);
    153. handler.sendMessage(message);
    154.  
    155. }
    156. //登入失敗
    157. else
    158. {
    159. Message message= new Message();
    160. message.what=2;
    161. Bundle temp = new Bundle();
    162. temp.putString("msg",msg);
    163. message.setData(temp);
    164. handler.sendMessage(message);
    165. }
    166. } catch (JSONException e) {
    167. e.printStackTrace();
    168. }
    169. }
    170. } 複製代碼 2.利用GET請求方式來實現人員登入
      1. package com.dream.apm;
      2.  
      3. import android.app.Activity;
      4. import android.content.pm.ActivityInfo;
      5. import android.os.Bundle;
      6. import android.os.Handler;
      7. import android.os.Looper;
      8. import android.os.Message;
      9. import android.view.View;
      10. import android.view.Window;
      11. import android.view.WindowManager;
      12. import android.widget.Button;
      13. import android.widget.EditText;
      14. import android.widget.LinearLayout;
      15. import android.widget.Toast;
      16. import org.json.JSONArray;
      17. import org.json.JSONException;
      18. import org.json.JSONObject;
      19.  
      20. import java.io.*;
      21. import java.net.HttpURLConnection;
      22. import java.net.MalformedURLException;
      23. import java.net.URL;
      24. import java.net.URLEncoder;
      25.  
      26. public class MyActivity extends Activity {
      27.  
      28. public Button start;
      29.  
      30. public EditText username,password;
      31.  
      32. public URL http_url;
      33.  
      34. public String data;
      35.  
      36. public Handler handler;
      37.  
      38. @Override
      39. public void onCreate(Bundle savedInstanceState){
      40. super.onCreate(savedInstanceState);
      41. //設定全屏
      42. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      43. WindowManager.LayoutParams.FLAG_FULLSCREEN);
      44. //去除應用程式標題
      45. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
      46. //設定豎屏
      47. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
      48. setContentView(R.layout.main);
      49.  
      50. start=(Button)findViewById(R.id.start_one);
      51. username=(EditText)findViewById(R.id.username);
      52. password=(EditText)findViewById(R.id.password);
      53. //訊息處理器
      54.  
      55. handler=new Handler(Looper.getMainLooper())
      56. {
      57. @Override
      58. public void handleMessage(Message msg)
      59. {
      60. super.handleMessage(msg);
      61. switch(msg.what)
      62. {
      63. //登入成功
      64. case 1:
      65. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
      66. Toast.LENGTH_SHORT).show();
      67. break;
      68. //登入失敗
      69. case 2:
      70. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
      71. Toast.LENGTH_SHORT).show();
      72. break;
      73.  
      74. }
      75. }
      76. };
      77.  
      78. start.setOnClickListener(new View.OnClickListener() {
      79. @Override
      80. public void onClick(View v) {
      81. //是否輸入帳號密碼
      82. if(username.getText().toString().length()>0&&password.getText().toString().length()>0){
      83. //子線程可以擷取UI的值,不能更改
      84. new Thread(new Runnable() {
      85. @Override
      86. public void run() {
      87. try {
      88. //請求地址--
      89. String url="http://10.0.2.2:8080/think/index.php/Home/Android?"+ "username=" + URLEncoder.encode(username.getText().toString(), "UTF-8")
      90. + "&password=" + URLEncoder.encode(password.getText().toString(), "UTF-8");
      91. http_url=new URL(url);
      92. if(http_url!=null)
      93. {
      94. //開啟一個HttpURLConnection串連
      95. HttpURLConnection conn = (HttpURLConnection) http_url.openConnection();
      96. conn.setConnectTimeout(5* 1000);//設定連線逾時
      97. conn.setRequestMethod("GET");//以get方式發起請求
      98. //允許輸入資料流
      99. conn.setDoInput(true);
      100. //接收伺服器響應
      101. if (conn.getResponseCode() == 200) {
      102. InputStream is = conn.getInputStream();//得到網路返回的輸入資料流
      103. BufferedReader buf=new BufferedReader(new InputStreamReader(is));//轉化為字元緩衝流
      104. data=buf.readLine();
      105. buf.close();is.close();
      106. //判斷登入結果
      107. analyse(data);
      108. }
      109. }
      110. } catch( Exception e) {
      111. e.printStackTrace();
      112. }
      113. }
      114. }).start();
      115. }
      116. else
      117. {
      118. Toast.makeText(MyActivity.this, "請完整輸入帳號密碼",
      119. Toast.LENGTH_SHORT).show();
      120. }
      121. }
      122. });
      123. }
      124.  
      125. public void analyse (String data)
      126. {
      127. System.out.println(data);
      128. try {
      129. JSONObject json_data=new JSONObject(data);
      130. Boolean state=json_data.getBoolean("success");
      131. String msg=json_data.getString("msg");
      132. //登入成功
      133. if(state)
      134. {
      135. //發送訊息
      136. Message message= new Message();
      137. message.what=1;
      138. Bundle temp = new Bundle();
      139. temp.putString("msg",msg);
      140. message.setData(temp);
      141. handler.sendMessage(message);
      142.  
      143. }
      144. //登入失敗
      145. else
      146. {
      147. Message message= new Message();
      148. message.what=2;
      149. Bundle temp = new Bundle();
      150. temp.putString("msg",msg);
      151. message.setData(temp);
      152. handler.sendMessage(message);
      153. }
      154. } catch (JSONException e) {
      155. e.printStackTrace();
      156. }
      157. }
      158. } 複製代碼 運行結果:



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.