<p><span style="font-size:14px;">Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看</span><a target=_blank href="http://blog.csdn.net/zuolongsnail/archive/2011/04/21/6338366.aspx"><span style="font-size:14px;">Android开发技巧总结</span></a><span style="font-size:14px;">中的Android单元测试的步骤一文。</span></p><p><span style="color:#0000ff;"><span style="font-size:14px;">java.net包中的HttpURLConnection类</span></span></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Get方式:</span></span></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 616px; LEFT: 547px"><embed id="ZeroClipboardMovie_1" height="18" name="ZeroClipboardMovie_1" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=1&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">//Get方式请求</span><span></span></span></li><li><span><span class="keyword">public</span><span></span><span class="keyword">static</span><span></span><span class="keyword">void</span><span>requestByGet()</span><span class="keyword">throws</span><span>Exception{</span></span></li><li class="alt"><span>Stringpath=<span class="string">"https://reg.163.com/logins.jsp?id=helloworld&pwd=android"</span><span>;</span></span></li><li><span><span class="comment">//新建一个URL对象</span><span></span></span></li><li class="alt"><span>URLurl=<span class="keyword">new</span><span>URL(path);</span></span></li><li><span><span class="comment">//打开一个HttpURLConnection连接</span><span></span></span></li><li class="alt"><span>HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();</span></li><li><span><span class="comment">//设置连接超时时间</span><span></span></span></li><li class="alt"><span>urlConn.setConnectTimeout(<span class="number">5</span><span>*</span><span class="number">1000</span><span>);</span></span></li><li><span><span class="comment">//开始连接</span><span></span></span></li><li class="alt"><span>urlConn.connect();</span></li><li><span><span class="comment">//判断请求是否成功</span><span></span></span></li><li class="alt"><span><span class="keyword">if</span><span>(urlConn.getResponseCode()==HTTP_200){</span></span></li><li><span><span class="comment">//获取返回的数据</span><span></span></span></li><li class="alt"><span><span class="keyword">byte</span><span>[]data=readStream(urlConn.getInputStream());</span></span></li><li><span>Log.i(TAG_GET,<span class="string">"Get方式请求成功,返回数据如下:"</span><span>);</span></span></li><li class="alt"><span>Log.i(TAG_GET,<span class="keyword">new</span><span>String(data,</span><span class="string">"UTF-8"</span><span>));</span></span></li><li><span>}<span class="keyword">else</span><span>{</span></span></li><li class="alt"><span>Log.i(TAG_GET,<span class="string">"Get方式请求失败"</span><span>);</span></span></li><li><span>}</span></li><li class="alt"><span><span class="comment">//关闭连接</span><span></span></span></li><li><span>urlConn.disconnect();</span></li><li class="alt"><span>}</span></li></ol></div></p><p></p><p></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Post方式:</span></span></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 1125px; LEFT: 547px"><embed id="ZeroClipboardMovie_2" height="18" name="ZeroClipboardMovie_2" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=2&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">//Post方式请求</span><span></span></span></li><li><span><span class="keyword">public</span><span></span><span class="keyword">static</span><span></span><span class="keyword">void</span><span>requestByPost()</span><span class="keyword">throws</span><span>Throwable{</span></span></li><li class="alt"><span>Stringpath=<span class="string">"https://reg.163.com/logins.jsp"</span><span>;</span></span></li><li><span><span class="comment">//请求的参数转换为byte数组</span><span></span></span></li><li class="alt"><span>Stringparams=<span class="string">"id="</span><span>+URLEncoder.encode(</span><span class="string">"helloworld"</span><span>,</span><span class="string">"UTF-8"</span><span>)</span></span></li><li><span>+<span class="string">"&pwd="</span><span>+URLEncoder.encode(</span><span class="string">"android"</span><span>,</span><span class="string">"UTF-8"</span><span>);</span></span></li><li class="alt"><span><span class="keyword">byte</span><span>[]postData=params.getBytes();</span></span></li><li><span><span class="comment">//新建一个URL对象</span><span></span></span></li><li class="alt"><span>URLurl=<span class="keyword">new</span><span>URL(path);</span></span></li><li><span><span class="comment">//打开一个HttpURLConnection连接</span><span></span></span></li><li class="alt"><span>HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();</span></li><li><span><span class="comment">//设置连接超时时间</span><span></span></span></li><li class="alt"><span>urlConn.setConnectTimeout(<span class="number">5</span><span>*</span><span class="number">1000</span><span>);</span></span></li><li><span><span class="comment">//Post请求必须设置允许输出</span><span></span></span></li><li class="alt"><span>urlConn.setDoOutput(<span class="keyword">true</span><span>);</span></span></li><li><span><span class="comment">//Post请求不能使用缓存</span><span></span></span></li><li class="alt"><span>urlConn.setUseCaches(<span class="keyword">false</span><span>);</span></span></li><li><span><span class="comment">//设置为Post请求</span><span></span></span></li><li class="alt"><span>urlConn.setRequestMethod(<span class="string">"POST"</span><span>);</span></span></li><li><span>urlConn.setInstanceFollowRedirects(<span class="keyword">true</span><span>);</span></span></li><li class="alt"><span><span class="comment">//配置请求Content-Type</span><span></span></span></li><li><span>urlConn.setRequestProperty(<span class="string">"Content-Type"</span><span>,</span></span></li><li class="alt"><span><span class="string">"application/x-www-form-urlencode"</span><span>);</span></span></li><li><span><span class="comment">//开始连接</span><span></span></span></li><li class="alt"><span>urlConn.connect();</span></li><li><span><span class="comment">//发送请求参数</span><span></span></span></li><li class="alt"><span>DataOutputStreamdos=<span class="keyword">new</span><span>DataOutputStream(urlConn.getOutputStream());</span></span></li><li><span>dos.write(postData);</span></li><li class="alt"><span>dos.flush();</span></li><li><span>dos.close();</span></li><li class="alt"><span><span class="comment">//判断请求是否成功</span><span></span></span></li><li><span><span class="keyword">if</span><span>(urlConn.getResponseCode()==HTTP_200){</span></span></li><li class="alt"><span><span class="comment">//获取返回的数据</span><span></span></span></li><li><span><span class="keyword">byte</span><span>[]data=readStream(urlConn.getInputStream());</span></span></li><li class="alt"><span>Log.i(TAG_POST,<span class="string">"Post请求方式成功,返回数据如下:"</span><span>);</span></span></li><li><span>Log.i(TAG_POST,<span class="keyword">new</span><span>String(data,</span><span class="string">"UTF-8"</span><span>));</span></span></li><li class="alt"><span>}<span class="keyword">else</span><span>{</span></span></li><li><span>Log.i(TAG_POST,<span class="string">"Post方式请求失败"</span><span>);</span></span></li><li class="alt"><span>}</span></li><li><span>}</span></li></ol></div></p><p></p><p></p><p><span style="color:#ff0000;"></span></p><p><span style="color:#0000ff;"><span style="font-size:14px;">org.apache.http包中的HttpGet和HttpPost类</span></span></p><p></p><p><span style="color:#0000ff;"><span style="font-size:12px;"></span></span></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Get方式:</span></span></p><p></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 2020px; LEFT: 547px"><embed id="ZeroClipboardMovie_3" height="18" name="ZeroClipboardMovie_3" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=3&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">//HttpGet方式请求</span><span></span></span></li><li><span><span class="keyword">public</span><span></span><span class="keyword">static</span><span></span><span class="keyword">void</span><span>requestByHttpGet()</span><span class="keyword">throws</span><span>Exception{</span></span></li><li class="alt"><span>Stringpath=<span class="string">"https://reg.163.com/logins.jsp?id=helloworld&pwd=android"</span><span>;</span></span></li><li><span><span class="comment">//新建HttpGet对象</span><span></span></span></li><li class="alt"><span>HttpGethttpGet=<span class="keyword">new</span><span>HttpGet(path);</span></span></li><li><span><span class="comment">//获取HttpClient对象</span><span></span></span></li><li class="alt"><span>HttpClienthttpClient=<span class="keyword">new</span><span>DefaultHttpClient();</span></span></li><li><span><span class="comment">//获取HttpResponse实例</span><span></span></span></li><li class="alt"><span>HttpResponsehttpResp=httpClient.execute(httpGet);</span></li><li><span><span class="comment">//判断是够请求成功</span><span></span></span></li><li class="alt"><span><span class="keyword">if</span><span>(httpResp.getStatusLine().getStatusCode()==HTTP_200){</span></span></li><li><span><span class="comment">//获取返回的数据</span><span></span></span></li><li class="alt"><span>Stringresult=EntityUtils.toString(httpResp.getEntity(),<span class="string">"UTF-8"</span><span>);</span></span></li><li><span>Log.i(TAG_HTTPGET,<span class="string">"HttpGet方式请求成功,返回数据如下:"</span><span>);</span></span></li><li class="alt"><span>Log.i(TAG_HTTPGET,result);</span></li><li><span>}<span class="keyword">else</span><span>{</span></span></li><li class="alt"><span>Log.i(TAG_HTTPGET,<span class="string">"HttpGet方式请求失败"</span><span>);</span></span></li><li><span>}</span></li><li class="alt"><span>}</span></li></ol></div></p><p></p><p></p><p><span style="color:#ff0000;"><span style="font-size:14px;">Post方式:</span></span></p><p><span style="color:#ff0000;"><span style="font-size:12px;"></span></span><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a target=_blank class="ViewSource" title="view plain" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">view plain</a><a target=_blank class="CopyToClipboard" title="copy" href="http://blog.csdn.net/zuolongsnail/article/details/6373051#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 2457px; LEFT: 547px"><embed id="ZeroClipboardMovie_4" height="18" name="ZeroClipboardMovie_4" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" allownetworking="all" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" flashvars="id=4&width=18&height=18" wmode="transparent" /></div></div></div><ol class="dp-j"><li class="alt"><span><span class="comment">//HttpPost方式请求</span><span></span></span></li><li><span><span class="keyword">public</span><span></span><span class="keyword">static</span><span></span><span class="keyword">void</span><span>requestByHttpPost()</span><span class="keyword">throws</span><span>Exception{</span></span></li><li class="alt"><span>Stringpath=<span class="string">"https://reg.163.com/logins.jsp"</span><span>;</span></span></li><li><span><span class="comment">//新建HttpPost对象</span><span></span></span></li><li class="alt"><span>HttpPosthttpPost=<span class="keyword">new</span><span>HttpPost(path);</span></span></li><li><span><span class="comment">//Post参数</span><span></span></span></li><li class="alt"><span>List<NameValuePair>params=<span class="keyword">new</span><span>ArrayList<NameValuePair>();</span></span></li><li><span>params.add(<span class="keyword">new</span><span>BasicNameValuePair(</span><span class="string">"id"</span><span>,</span><span class="string">"helloworld"</span><span>));</span></span></li><li class="alt"><span>params.add(<span class="keyword">new</span><span>BasicNameValuePair(</span><span class="string">"pwd"</span><span>,</span><span class="string">"android"</span><span>));</span></span></li><li><span><span class="comment">//设置字符集</span><span></span></span></li><li class="alt"><span>HttpEntityentity=<span class="keyword">new</span><span>UrlEncodedFormEntity(params,HTTP.UTF_8);</span></span></li><li><span><span class="comment">//设置参数实体</span><span></span></span></li><li class="alt"><span>httpPost.setEntity(entity);</span></li><li><span><span class="comment">//获取HttpClient对象</span><span></span></span></li><li class="alt"><span>HttpClienthttpClient=<span class="keyword">new</span><span>DefaultHttpClient();</span></span></li><li><span><span class="comment">//获取HttpResponse实例</span><span></span></span></li><li class="alt"><span>HttpResponsehttpResp=httpClient.execute(httpPost);</span></li><li><span><span class="comment">//判断是够请求成功</span><span></span></span></li><li class="alt"><span><span class="keyword">if</span><span>(httpResp.getStatusLine().getStatusCode()==HTTP_200){</span></span></li><li><span><span class="comment">//获取返回的数据</span><span></span></span></li><li class="alt"><span>Stringresult=EntityUtils.toString(httpResp.getEntity(),<span class="string">"UTF-8"</span><span>);</span></span></li><li><span>Log.i(TAG_HTTPGET,<span class="string">"HttpPost方式请求成功,返回数据如下:"</span><span>);</span></span></li><li class="alt"><span>Log.i(TAG_HTTPGET,result);</span></li><li><span>}<span class="keyword">else</span><span>{</span></span></li><li class="alt"><span>Log.i(TAG_HTTPGET,<span class="string">"HttpPost方式请求失败"</span><span>);</span></span></li><li><span>}</span></li><li class="alt"><span>}</span></li></ol></div></p><p></p><p></p><p><span style="COLOR: #ff0000"><span style="font-size:12px;"><span style="color:#000000;"><span style="font-size:14px;">以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。</span></span></span></span></p>
  
  
  
<span style="font-size:14px;">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<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();      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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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<NameValuePair> params = new ArrayList<NameValuePair>();   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<String,String> map=new HashMap<String,String>();//用集合来做,比字符串拼接来得直观           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<String,String> map) throws Exception      {          StringBuilder builder=new StringBuilder(); //拼接字符           //拿出键值           if(map!=null && !map.isEmpty())          {              for(Map.Entry<String, String> 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;                 }  } </span>

更多相关文章

  1. Android中的几种网络请求方式详解 .
  2. 【iOS-Android开发对比】之 数据存储
  3. (一)Android数据结构学习之链表
  4. Android中的IPC方式(二)
  5. Android中sqlite数据库的简单使用

随机推荐

  1. android保存联系人到通讯录
  2. nfc是什么 手机nfc功能是什么
  3. Android项目如果要将自己写的类写成要单
  4. 集成Android 科大讯飞免费在线语音合成播
  5. Android 侧滑菜单的简单实现(SlidingMenu)
  6. 研究一下Android滑屏的功能的原理,及scrol
  7. Android(安卓)自定义camera压缩图片到指
  8. Android—— Android 的属性系统
  9. android Task简介
  10. android之Eclipse如何使用adb