Android向服务器传接和接收数据的方法汇总

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

java.net包中的HttpURLConnection类

Get方式:

  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方式:

  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方式:

  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方式:

  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;   
          
    }  
} 

你可能感兴趣的:(android)