android与服务器交互方式

Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法。

代码比较简单,这里不去过多的阐述,直接看代码。

 

Java代码   收藏代码
  1. /** 
  2.  * @author Dylan 
  3.  * 本类封装了Android中向web服务器提交数据的两种方式四种方法 
  4.  */  
  5. public class SubmitDataByHttpClientAndOrdinaryWay {  
  6.   
  7.     /** 
  8.      * 使用get请求以普通方式提交数据 
  9.      * @param map 传递进来的数据,以map的形式进行了封装 
  10.      * @param path 要求服务器servlet的地址 
  11.      * @return 返回的boolean类型的参数 
  12.      * @throws Exception 
  13.      */  
  14.     public Boolean submitDataByDoGet(Map<String, String> map, String path) throws Exception {  
  15.         // 拼凑出请求地址  
  16.         StringBuilder sb = new StringBuilder(path);  
  17.         sb.append("?");  
  18.         for (Map.Entry<String, String> entry : map.entrySet()) {  
  19.             sb.append(entry.getKey()).append("=").append(entry.getValue());  
  20.             sb.append("&");  
  21.         }  
  22.         sb.deleteCharAt(sb.length() - 1);  
  23.         String str = sb.toString();  
  24.         System.out.println(str);  
  25.         URL Url = new URL(str);  
  26.         HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();  
  27.         HttpConn.setRequestMethod("GET");  
  28.         HttpConn.setReadTimeout(5000);  
  29.         // GET方式的请求不用设置什么DoOutPut()之类的吗?  
  30.         if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {  
  31.             return true;  
  32.         }  
  33.         return false;  
  34.     }  
  35.   
  36.     /** 
  37.      * 普通方式的DoPost请求提交数据 
  38.      * @param map 传递进来的数据,以map的形式进行了封装 
  39.      * @param path 要求服务器servlet的地址 
  40.      * @return 返回的boolean类型的参数 
  41.      * @throws Exception 
  42.      */  
  43.     public Boolean submitDataByDoPost(Map<String, String> map, String path) throws Exception {  
  44.         // 注意Post地址中是不带参数的,所以newURL的时候要注意不能加上后面的参数  
  45.         URL Url = new URL(path);  
  46.         // Post方式提交的时候参数和URL是分开提交的,参数形式是这样子的:name=y&age=6  
  47.         StringBuilder sb = new StringBuilder();  
  48.         // sb.append("?");  
  49.         for (Map.Entry<String, String> entry : map.entrySet()) {  
  50.             sb.append(entry.getKey()).append("=").append(entry.getValue());  
  51.             sb.append("&");  
  52.         }  
  53.         sb.deleteCharAt(sb.length() - 1);  
  54.         String str = sb.toString();  
  55.   
  56.         HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();  
  57.         HttpConn.setRequestMethod("POST");  
  58.         HttpConn.setReadTimeout(5000);  
  59.         HttpConn.setDoOutput(true);  
  60.         HttpConn.setRequestProperty("Content-Type""application/x-www-form-urlencoded");  
  61.         HttpConn.setRequestProperty("Content-Length", String.valueOf(str.getBytes().length));  
  62.         OutputStream os = HttpConn.getOutputStream();  
  63.         os.write(str.getBytes());  
  64.         if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {  
  65.             return true;  
  66.         }  
  67.         return false;  
  68.     }  
  69.   
  70.     /** 
  71.      * 以HttpClient的DoGet方式向服务器发送请数据 
  72.      * @param map 传递进来的数据,以map的形式进行了封装 
  73.      * @param path 要求服务器servlet的地址 
  74.      * @return 返回的boolean类型的参数 
  75.      * @throws Exception 
  76.      */  
  77.     public Boolean submitDataByHttpClientDoGet(Map<String, String> map, String path) throws Exception {  
  78.         HttpClient hc = new DefaultHttpClient();  
  79.         // 请求路径  
  80.         StringBuilder sb = new StringBuilder(path);  
  81.         sb.append("?");  
  82.         for (Map.Entry<String, String> entry : map.entrySet()) {  
  83.             sb.append(entry.getKey()).append("=").append(entry.getValue());  
  84.             sb.append("&");  
  85.         }  
  86.         sb.deleteCharAt(sb.length() - 1);  
  87.         String str = sb.toString();  
  88.         System.out.println(str);  
  89.         HttpGet request = new HttpGet(sb.toString());  
  90.   
  91.         HttpResponse response = hc.execute(request);  
  92.         if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {  
  93.             return true;  
  94.         }  
  95.         return false;  
  96.     }  
  97.       
  98.     /** 
  99.      * 以HttpClient的DoPost方式提交数据到服务器 
  100.      * @param map 传递进来的数据,以map的形式进行了封装 
  101.      * @param path 要求服务器servlet的地址 
  102.      * @return 返回的boolean类型的参数 
  103.      * @throws Exception 
  104.      */  
  105.     public Boolean submintDataByHttpClientDoPost(Map<String, String> map, String path) throws Exception {  
  106.         // 1. 获得一个相当于浏览器对象HttpClient,使用这个接口的实现类来创建对象,DefaultHttpClient  
  107.         HttpClient hc = new DefaultHttpClient();  
  108.         // DoPost方式请求的时候设置请求,关键是路径  
  109.         HttpPost request = new HttpPost(path);  
  110.         // 2. 为请求设置请求参数,也即是将要上传到web服务器上的参数  
  111.         List<NameValuePair> parameters = new ArrayList<NameValuePair>();  
  112.         for (Map.Entry<String, String> entry : map.entrySet()) {  
  113.             NameValuePair nameValuePairs = new BasicNameValuePair(entry.getKey(), entry.getValue());  
  114.             parameters.add(nameValuePairs);  
  115.         }  
  116.         // 请求实体HttpEntity也是一个接口,我们用它的实现类UrlEncodedFormEntity来创建对象,注意后面一个String类型的参数是用来指定编码的  
  117.         HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");  
  118.         request.setEntity(entity);  
  119.         // 3. 执行请求  
  120.         HttpResponse response = hc.execute(request);  
  121.         // 4. 通过返回码来判断请求成功与否  
  122.         if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {  
  123.             return true;  
  124.         }  
  125.         return false;  
  126.     }  
  127. }  
 

你可能感兴趣的:(android与服务器交互方式)