博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android向服务器传接和接收数据的方法汇总
阅读量:5839 次
发布时间:2019-06-18

本文共 11615 字,大约阅读时间需要 38 分钟。

hot3.png

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。

java.net包中的HttpURLConnection类

Get方式:

[java]
view plain
copy
  1. // Get方式请求  
  2. public static void requestByGet() throws Exception {  
  3.     String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";  
  4.     // 新建一个URL对象  
  5.     URL url = new URL(path);  
  6.     // 打开一个HttpURLConnection连接  
  7.     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
  8.     // 设置连接超时时间  
  9.     urlConn.setConnectTimeout(5 * 1000);  
  10.     // 开始连接  
  11.     urlConn.connect();  
  12.     // 判断请求是否成功  
  13.     if (urlConn.getResponseCode() == HTTP_200) {  
  14.         // 获取返回的数据  
  15.         byte[] data = readStream(urlConn.getInputStream());  
  16.         Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");  
  17.         Log.i(TAG_GET, new String(data, "UTF-8"));  
  18.     } else {  
  19.         Log.i(TAG_GET, "Get方式请求失败");  
  20.     }  
  21.     // 关闭连接  
  22.     urlConn.disconnect();  
  23. }  

Post方式:

[java]
view plain
copy
  1. // Post方式请求  
  2. public static void requestByPost() throws Throwable {  
  3.     String path = "https://reg.163.com/logins.jsp";  
  4.     // 请求的参数转换为byte数组  
  5.     String params = "id=" + URLEncoder.encode("helloworld""UTF-8")  
  6.             + "&pwd=" + URLEncoder.encode("android""UTF-8");  
  7.     byte[] postData = params.getBytes();  
  8.     // 新建一个URL对象  
  9.     URL url = new URL(path);  
  10.     // 打开一个HttpURLConnection连接  
  11.     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();  
  12.     // 设置连接超时时间  
  13.     urlConn.setConnectTimeout(5 * 1000);  
  14.     // Post请求必须设置允许输出  
  15.     urlConn.setDoOutput(true);  
  16.     // Post请求不能使用缓存  
  17.     urlConn.setUseCaches(false);  
  18.     // 设置为Post请求  
  19.     urlConn.setRequestMethod("POST");  
  20.     urlConn.setInstanceFollowRedirects(true);  
  21.     // 配置请求Content-Type  
  22.     urlConn.setRequestProperty("Content-Type",  
  23.             "application/x-www-form-urlencode");  
  24.     // 开始连接  
  25.     urlConn.connect();  
  26.     // 发送请求参数  
  27.     DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());  
  28.     dos.write(postData);  
  29.     dos.flush();  
  30.     dos.close();  
  31.     // 判断请求是否成功  
  32.     if (urlConn.getResponseCode() == HTTP_200) {  
  33.         // 获取返回的数据  
  34.         byte[] data = readStream(urlConn.getInputStream());  
  35.         Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");  
  36.         Log.i(TAG_POST, new String(data, "UTF-8"));  
  37.     } else {  
  38.         Log.i(TAG_POST, "Post方式请求失败");  
  39.     }  
  40. }  
  

org.apache.http包中的HttpGet和HttpPost类

Get方式:

[java]
view plain
copy
  1. // HttpGet方式请求  
  2. public static void requestByHttpGet() throws Exception {  
  3.     String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";  
  4.     // 新建HttpGet对象  
  5.     HttpGet httpGet = new HttpGet(path);  
  6.     // 获取HttpClient对象  
  7.     HttpClient httpClient = new DefaultHttpClient();  
  8.     // 获取HttpResponse实例  
  9.     HttpResponse httpResp = httpClient.execute(httpGet);  
  10.     // 判断是够请求成功  
  11.     if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {  
  12.         // 获取返回的数据  
  13.         String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");  
  14.         Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:");  
  15.         Log.i(TAG_HTTPGET, result);  
  16.     } else {  
  17.         Log.i(TAG_HTTPGET, "HttpGet方式请求失败");  
  18.     }  
  19. }  

Post方式:

[java]
view plain
copy
  1. // HttpPost方式请求  
  2. public static void requestByHttpPost() throws Exception {  
  3.     String path = "https://reg.163.com/logins.jsp";  
  4.     // 新建HttpPost对象  
  5.     HttpPost httpPost = new HttpPost(path);  
  6.     // Post参数  
  7.     List
     params = 
    new
     ArrayList
    ();  
  8.     params.add(new BasicNameValuePair("id""helloworld"));  
  9.     params.add(new BasicNameValuePair("pwd""android"));  
  10.     // 设置字符集  
  11.     HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);  
  12.     // 设置参数实体  
  13.     httpPost.setEntity(entity);  
  14.     // 获取HttpClient对象  
  15.     HttpClient httpClient = new DefaultHttpClient();  
  16.     // 获取HttpResponse实例  
  17.     HttpResponse httpResp = httpClient.execute(httpPost);  
  18.     // 判断是够请求成功  
  19.     if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {  
  20.         // 获取返回的数据  
  21.         String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");  
  22.         Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:");  
  23.         Log.i(TAG_HTTPGET, result);  
  24.     } else {  
  25.         Log.i(TAG_HTTPGET, "HttpPost方式请求失败");  
  26.     }  
  27. }  

以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。

 
 
 
package com.example.shezhi;import java.io.IOException;import java.io.OutputStream;  import java.net.HttpURLConnection;  import java.net.URL;  import java.net.URLEncoder;  import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;  import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.utils.URLEncodedUtils;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;  public class Update   {  	String res=" ";	int ites;	String version="1";/    public String getupdate(){	 //先将参数放入List,再对参数进行URL编码   	  List
params = new LinkedList
(); params.add(new BasicNameValuePair("param1", "1")); params.add(new BasicNameValuePair("param2", "value2")); //对参数编码 String param = URLEncodedUtils.format(params, "UTF-8"); //baseUrl String baseUrl = "http://******/index1.jsp"; //将URL与参数拼接 HttpGet getMethod = new HttpGet(baseUrl + "?" + param); HttpClient httpClient = new DefaultHttpClient(); try { HttpResponse response = httpClient.execute(getMethod); res="已经请求"; } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //发起GET请求 try { HttpResponse response = httpClient.execute(getMethod); //发起GET请求 ites=response.getStatusLine().getStatusCode(); //获取响应码 System.out.println(ites+"aaa"); res="1213"+EntityUtils.toString(response.getEntity(), "utf-8");//获取服务器响应内容 System.out.println(res+"vvv"); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return res; } /******************************************************************************************** /** * HttpClient Post方法 * @return */ public String Postupdate(){ String urlPath="http://******/index1.jsp"; String realPath=urlPath.replaceAll(" ", "");//把多余的空格替换掉 HttpPost httpRequest=new HttpPost(realPath); // 添加要传递的参数 List
params = new ArrayList
(); NameValuePair pair1 = new BasicNameValuePair("username", "gzw"); NameValuePair pair2 = new BasicNameValuePair("password", "123"); params.add(pair1); params.add(pair2); try { // 设置字符集 HttpEntity httpentity = new UrlEncodedFormEntity(params, "utf-8"); // 请求httpRequest httpRequest.setEntity(httpentity); // 取得默认的HttpClient HttpClient httpclient = new DefaultHttpClient(); // 取得HttpResponse HttpResponse httpResponse = httpclient.execute(httpRequest); // HttpStatus.SC_OK表示连接成功 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 取得返回的字符串 String strResult = EntityUtils.toString(httpResponse.getEntity()); res=strResult; } else { res="失败"; } }catch (Exception e) { e.printStackTrace(); } return res; }/********************************************************************************************/ /** * 调用java类 get方法 */ public String get_update(){ String urlPath="http://******/index1.jsp"+"?type=save&version="+version+""; String realPath=urlPath.replaceAll(" ", "");//把多余的空格替换掉 try { if(getRequest(realPath)) { //成功 res="成功"; } }catch (Exception e) { res="失败"; } return res; } /** * java类 get方法 * @return */ //get请求,有文件长度大小限制 public static boolean getRequest(String urlPath) throws Exception { URL url=new URL(urlPath); HttpURLConnection con=(HttpURLConnection)url.openConnection(); con.setRequestMethod("GET"); con.setReadTimeout(5*1000); if(con.getResponseCode()==200) { return true; } return false; } /******************************************************************************************** /** * 调用下面java类 Post方法 * @return */ public String post_update(){ String urlPath="http://www.gdhdcy.com/hdleague1/index1.jsp"; Map
map=new HashMap
();//用集合来做,比字符串拼接来得直观 map.put("type", "save"); map.put("version", version); try { if(postRequest(urlPath,map)) { //成功 res="成功"; } }catch (Exception e) { res="失败"; } return res; } /** * java类 post方法 * @return */ //post请求,无文件长度大小限制 public static boolean postRequest(String urlPath,Map
map) throws Exception { StringBuilder builder=new StringBuilder(); //拼接字符 //拿出键值 if(map!=null && !map.isEmpty()) { for(Map.Entry
param:map.entrySet()) { builder.append(param.getKey()).append('=').append(URLEncoder.encode(param.getValue(), "utf-8")).append('&'); } builder.deleteCharAt(builder.length()-1); } //下面的Content-Length: 是这个URL的二进制数据长度 byte b[]=builder.toString().getBytes(); URL url=new URL(urlPath); HttpURLConnection con=(HttpURLConnection)url.openConnection(); con.setRequestMethod("POST"); con.setReadTimeout(5*1000); con.setDoOutput(true);//打开向外输出 con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//内容类型 con.setRequestProperty("Content-Length",String.valueOf(b.length));//长度 OutputStream outStream=con.getOutputStream(); outStream.write(b);//写入数据 outStream.flush();//刷新内存 outStream.close(); //状态码是不成功 if(con.getResponseCode()==200) { return true; } return false; } }

转载于:https://my.oschina.net/pangzhuzhu/blog/318163

你可能感兴趣的文章
传值方式:ajax技术和普通传值方式
查看>>
Linux-网络连接-(VMware与CentOS)
查看>>
寻找链表相交节点
查看>>
linq 学习笔记之 Linq基本子句
查看>>
[Js]布局转换
查看>>
Hot Bath
查看>>
Java annotation 自定义注释@interface的用法
查看>>
Apache Spark 章节1
查看>>
Linux crontab定时执行任务
查看>>
mysql root密码重置
查看>>
33蛇形填数
查看>>
选择排序
查看>>
SQL Server 数据库的数据和日志空间信息
查看>>
前端基础之JavaScript
查看>>
自己动手做个智能小车(6)
查看>>
自己遇到的,曾未知道的知识点
查看>>
P1382 楼房 set用法小结
查看>>
分类器性能度量
查看>>
docker 基础
查看>>
写一个bat文件,删除文件名符合特定规则,且更改日期在某
查看>>