欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Android POST GET请求

来源: 开发者 投稿于  被查看 34496 次 评论:76

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. } 复制代码 运行结果:
        \


        \

用户评论