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. <?php

  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class AndroidController extends Controller {
  5. public function index()
  6. {
  7. //获取账号密码
  8. $id=I(‘username‘);
  9. $pwd=I(‘password‘);
  10. $User=M(‘user‘);
  11. //查询数据库
  12. $data = $User->where("NAME=‘$id‘  AND PASSWORD=‘$pwd‘ ")->find();
  13. //登入成功
  14. if($data)
  15. {
  16. $response = array(‘success‘ => true,‘msg‘=>‘登入成功‘);
  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. }

复制代码

记得添加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Android的网络请求主要使用java.net包中的HttpURLConnection类,服务器与Android客户端数据交互格式为json

1.利用POST请求方式来实现人员登入。

  1. package com.dream.apm;
  2. import android.app.Activity;
  3. import android.content.pm.ActivityInfo;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Looper;
  7. import android.os.Message;
  8. import android.view.View;
  9. import android.view.Window;
  10. import android.view.WindowManager;
  11. import android.widget.Button;
  12. import android.widget.EditText;
  13. import android.widget.LinearLayout;
  14. import android.widget.Toast;
  15. import org.json.JSONArray;
  16. import org.json.JSONException;
  17. import org.json.JSONObject;
  18. import java.io.*;
  19. import java.net.HttpURLConnection;
  20. import java.net.MalformedURLException;
  21. import java.net.URL;
  22. import java.net.URLEncoder;
  23. public class MyActivity extends Activity {
  24. //请求地址
  25. private static String url="http://10.0.2.2:8080/think/index.php/Home/Android";
  26. public Button start;
  27. public EditText username,password;
  28. public URL http_url;
  29. public String data;
  30. public Handler handler;
  31. @Override
  32. public void onCreate(Bundle savedInstanceState){
  33. super.onCreate(savedInstanceState);
  34. //设置全屏
  35. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  36. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  37. //去除应用程序标题
  38. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  39. //设置竖屏
  40. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  41. setContentView(R.layout.main);
  42. start=(Button)findViewById(R.id.start_one);
  43. username=(EditText)findViewById(R.id.username);
  44. password=(EditText)findViewById(R.id.password);
  45. //消息处理器
  46. handler=new Handler(Looper.getMainLooper())
  47. {
  48. @Override
  49. public void handleMessage(Message msg)
  50. {
  51. super.handleMessage(msg);
  52. switch(msg.what)
  53. {
  54. //登入成功
  55. case 1:
  56. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
  57. Toast.LENGTH_SHORT).show();
  58. break;
  59. //登入失败
  60. case 2:
  61. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
  62. Toast.LENGTH_SHORT).show();
  63. break;
  64. }
  65. }
  66. };
  67. start.setOnClickListener(new View.OnClickListener() {
  68. @Override
  69. public void onClick(View v) {
  70. //是否输入账号密码
  71. if(username.getText().toString().length()>0&&password.getText().toString().length()>0){
  72. //子线程可以获取UI的值,不能更改
  73. new Thread(new Runnable() {
  74. @Override
  75. public void run() {
  76. try {
  77. http_url=new URL(url);
  78. if(http_url!=null)
  79. {
  80. //打开一个HttpURLConnection连接
  81. HttpURLConnection conn = (HttpURLConnection) http_url.openConnection();
  82. conn.setConnectTimeout(5* 1000);//设置连接超时
  83. conn.setRequestMethod("POST");//以get方式发起请求
  84. //允许输入输出流
  85. conn.setDoInput(true);
  86. conn.setDoOutput(true);
  87. conn.setUseCaches(false);//使用Post方式不能使用缓存
  88. //获取账号密码
  89. String params = "username=" + username.getText().toString()
  90. + "&password=" + password.getText().toString();
  91. //设置请求体的类型是文本类型
  92. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  93. //设置请求体的长度--字节长度
  94. conn.setRequestProperty("Content-Length",String.valueOf(params.getBytes().length) );
  95. //发送post参数
  96. BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
  97. bw.write(params);
  98. bw.close();
  99. //接收服务器响应
  100. if (conn.getResponseCode() == 200) {
  101. InputStream is = conn.getInputStream();//得到网络返回的输入流
  102. BufferedReader buf=new BufferedReader(new InputStreamReader(is));//转化为字符缓冲流
  103. data=buf.readLine();
  104. buf.close();is.close();
  105. //判断登入结果
  106. analyse(data);
  107. }
  108. }
  109. } catch( Exception e) {
  110. e.printStackTrace();
  111. }
  112. }
  113. }).start();
  114. }
  115. else
  116. {
  117. Toast.makeText(MyActivity.this, "请完整输入账号密码",
  118. Toast.LENGTH_SHORT).show();
  119. }
  120. }
  121. });
  122. }
  123. public void analyse (String data)
  124. {
  125. System.out.println(data);
  126. try {
  127. JSONObject json_data=new JSONObject(data);
  128. Boolean state=json_data.getBoolean("success");
  129. String msg=json_data.getString("msg");
  130. //登入成功
  131. if(state)
  132. {
  133. //发送消息
  134. Message message= new Message();
  135. message.what=1;
  136. Bundle temp = new Bundle();
  137. temp.putString("msg",msg);
  138. message.setData(temp);
  139. handler.sendMessage(message);
  140. }
  141. //登入失败
  142. else
  143. {
  144. Message message= new Message();
  145. message.what=2;
  146. Bundle temp = new Bundle();
  147. temp.putString("msg",msg);
  148. message.setData(temp);
  149. handler.sendMessage(message);
  150. }
  151. } catch (JSONException e) {
  152. e.printStackTrace();
  153. }
  154. }
  155. }

复制代码

2.利用GET请求方式来实现人员登入

  1. package com.dream.apm;

  2. import android.app.Activity;
  3. import android.content.pm.ActivityInfo;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Looper;
  7. import android.os.Message;
  8. import android.view.View;
  9. import android.view.Window;
  10. import android.view.WindowManager;
  11. import android.widget.Button;
  12. import android.widget.EditText;
  13. import android.widget.LinearLayout;
  14. import android.widget.Toast;
  15. import org.json.JSONArray;
  16. import org.json.JSONException;
  17. import org.json.JSONObject;
  18. import java.io.*;
  19. import java.net.HttpURLConnection;
  20. import java.net.MalformedURLException;
  21. import java.net.URL;
  22. import java.net.URLEncoder;
  23. public class MyActivity extends Activity {
  24. public Button start;
  25. public EditText username,password;
  26. public URL http_url;
  27. public String data;
  28. public Handler handler;
  29. @Override
  30. public void onCreate(Bundle savedInstanceState){
  31. super.onCreate(savedInstanceState);
  32. //设置全屏
  33. getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  34. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  35. //去除应用程序标题
  36. this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  37. //设置竖屏
  38. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  39. setContentView(R.layout.main);
  40. start=(Button)findViewById(R.id.start_one);
  41. username=(EditText)findViewById(R.id.username);
  42. password=(EditText)findViewById(R.id.password);
  43. //消息处理器
  44. handler=new Handler(Looper.getMainLooper())
  45. {
  46. @Override
  47. public void handleMessage(Message msg)
  48. {
  49. super.handleMessage(msg);
  50. switch(msg.what)
  51. {
  52. //登入成功
  53. case 1:
  54. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
  55. Toast.LENGTH_SHORT).show();
  56. break;
  57. //登入失败
  58. case 2:
  59. Toast.makeText(MyActivity.this, msg.getData().getString("msg"),
  60. Toast.LENGTH_SHORT).show();
  61. break;
  62. }
  63. }
  64. };
  65. start.setOnClickListener(new View.OnClickListener() {
  66. @Override
  67. public void onClick(View v) {
  68. //是否输入账号密码
  69. if(username.getText().toString().length()>0&&password.getText().toString().length()>0){
  70. //子线程可以获取UI的值,不能更改
  71. new Thread(new Runnable() {
  72. @Override
  73. public void run() {
  74. try {
  75. //请求地址--
  76. String url="http://10.0.2.2:8080/think/index.php/Home/Android?"+ "username=" + URLEncoder.encode(username.getText().toString(), "UTF-8")
  77. + "&password=" + URLEncoder.encode(password.getText().toString(), "UTF-8");
  78. http_url=new URL(url);
  79. if(http_url!=null)
  80. {
  81. //打开一个HttpURLConnection连接
  82. HttpURLConnection conn = (HttpURLConnection) http_url.openConnection();
  83. conn.setConnectTimeout(5* 1000);//设置连接超时
  84. conn.setRequestMethod("GET");//以get方式发起请求
  85. //允许输入流
  86. conn.setDoInput(true);
  87. //接收服务器响应
  88. if (conn.getResponseCode() == 200) {
  89. InputStream is = conn.getInputStream();//得到网络返回的输入流
  90. BufferedReader buf=new BufferedReader(new InputStreamReader(is));//转化为字符缓冲流
  91. data=buf.readLine();
  92. buf.close();is.close();
  93. //判断登入结果
  94. analyse(data);
  95. }
  96. }
  97. } catch( Exception e) {
  98. e.printStackTrace();
  99. }
  100. }
  101. }).start();
  102. }
  103. else
  104. {
  105. Toast.makeText(MyActivity.this, "请完整输入账号密码",
  106. Toast.LENGTH_SHORT).show();
  107. }
  108. }
  109. });
  110. }
  111. public void analyse (String data)
  112. {
  113. System.out.println(data);
  114. try {
  115. JSONObject json_data=new JSONObject(data);
  116. Boolean state=json_data.getBoolean("success");
  117. String msg=json_data.getString("msg");
  118. //登入成功
  119. if(state)
  120. {
  121. //发送消息
  122. Message message= new Message();
  123. message.what=1;
  124. Bundle temp = new Bundle();
  125. temp.putString("msg",msg);
  126. message.setData(temp);
  127. handler.sendMessage(message);
  128. }
  129. //登入失败
  130. else
  131. {
  132. Message message= new Message();
  133. message.what=2;
  134. Bundle temp = new Bundle();
  135. temp.putString("msg",msg);
  136. message.setData(temp);
  137. handler.sendMessage(message);
  138. }
  139. } catch (JSONException e) {
  140. e.printStackTrace();
  141. }
  142. }
  143. }

复制代码

运行结果:

时间: 2024-10-20 19:58:13

Android POST GET请求的相关文章

Android中客户端请求服务器端的方式讲解(一)附源码

Android中客户端请求服务器端的两种方式:Post方式和Get方式 在这里不直接赘述了,直接上源码如下: (1).Post的方式: /** * Post的请求方式 * * @param model * 请求序号 * @param paramList * 客户端请求的数据参数列表 * @return */ public JSONObject doPost(int model, List<NameValuePair> paramList) { try { // 客户端向服务器发送请求的数据 L

android通过httpClient请求获取JSON数据并且解析

android通过httpClient请求获取JSON数据并且解析:http://www.cnblogs.com/gzggyy/archive/2013/05/08/3066288.html Android--使用Http向服务器发送请求并取得返回结果,下载图片:http://www.2cto.com/kf/201307/229489.html Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据):http://blog.csdn.net/he

基于Retrofit+RxJava的Android分层网络请求框架

目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及数据传输安全性高等特点. Retrofit源码更是经典的设计模式教程,笔者已在之前的文章中分享过自己的一些体会,有兴趣的话可点击以下链接了解:<Retrofit源码设计模式解析(上)>.<Retrofit源码设计模式解析(下)> 但在具体业务场景下,比如涉及到多种网络请求(GET/PU

Android 实现 HttpClient 请求Https

如题,默认下,HttpClient是不能请求Https的,需要自己获取 [java] view plaincopy private static final int SET_CONNECTION_TIMEOUT = 5 * 1000; private static final int SET_SOCKET_TIMEOUT = 20 * 1000; public static HttpClient getNewHttpClient() { try { KeyStore trustStore = K

Android——网络 GET请求+POST请求

Android--网络  GET请求+POST请求 获取数据用GET请求   ?? 增删改查修改数据用POST请求 package com.example.jreduch07; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; i

Github 上Top1的Android 异步网络请求框架

今天给大家分享一个github上Top1的Android异步网络请求框架的使用方法,我给大家分享一个它的基本用法. 先来一个简单的get请求 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before reques

android http post 请求与 json字符串

一.目标 android客户端发送一个json格式的http的请求,期望得到服务端的一个json反馈. 1. 客户端发送的json格式为: {"data" : "valueString"} 2. 服务端发送的json格式:  { "errorCode" : "valueString", "entries":[ { "name":"海底捞", "phone&q

android 设置网络请求超时

UI界面更新必须在ui线程中 不能在ruanable线程中操作ui 可以发送消息利用handler来更新ui    private void load() {        LoadDate load = new LoadDate();        load.execute("http://h.hiphotos.baidu.com/image/w%3D310/sign=1bc9c0da38292df597c3aa148c305ce2/c83d70cf3bc79f3d77fbe1c5b8a1cd

android发送get请求时报错

异常信息: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.synology.synologycloud/com.synology.synologycloud.MainActivity}: android.os.NetworkOnMainThreadException 第一次看到这异常,字面意思是说:在主线程中的网络异常.然后我就去了解了下这个异常,先看看官方的说明 public class Netwo