Android网络数据请求之HttpClient

来源:互联网 发布:软件总工程师简历 编辑:程序博客网 时间:2024/04/29 18:17

一、HttpClient体系主要概况;

二、HttpClient 的HttpGet和HttpPost的示例代码。

[html] view plaincopy
  1. 对客户端请求进行数据封装和方法构建:  
  2.   
  3. 1. 主体:客户端  public class org.apache.http.impl.client.  
  4.   
  5.                    DefaultHttpClient extends AbstractHttpClient  
  6.   
  7.           客户端对象只有一个任务:发请求  
  8.   
  9.           DefaultHttpClient client = new DefaultHttpClient();  
  10.   
  11.           HttpResponse response = client.execute(get);  
  12.   
  13.           HttpResponse response = client.execute(post);  
  14.   
  15. 2. 附体:请求方式  public class org.apache.http.client.methods:  
  16.   
  17.                    1. HttpGet extends HttpRequestBase  
  18.   
  19.                    2. HttpPost extends HttpEntityEnclosingRequestBase  
  20.   
  21.           请求方式对象是对请求相关数据的封装:  
  22.   
  23.           get.setHeaders(headers);  
  24.   
  25.           post.setHeaders(headers);  
  26.   
  27.           post.setHeaders(headers);  
  28.   
  29.           post.setParams(params);  
  30.   
  31.           post.setEntity(entity);  
  32.   
  33. 3.数据:请求消息头  public class org.apache.http.message.  
  34.   
  35.                    BasicHeader implements org.apache.http.Header, java.lang.Cloneable  
  36.   
  37.           请求头是对消息头的封装:  
  38.   
  39.           private static BasicHeader[] headers = new BasicHeader[10];  
  40.   
  41. static {  
  42.         headers[0] = new BasicHeader("Appkey", "");  
  43.         headers[1] = new BasicHeader("Udid", "");  
  44.         headers[2] = new BasicHeader("Os", "");  
  45.         headers[3] = new BasicHeader("Osversion", "");  
  46.         headers[4] = new BasicHeader("Appversion", "");  
  47.         headers[5] = new BasicHeader("Sourceid", "");  
  48.         headers[6] = new BasicHeader("Ver", "");  
  49.         headers[7] = new BasicHeader("Userid", "");  
  50.         headers[8] = new BasicHeader("Usersession", "");  
  51.         headers[9] = new BasicHeader("Unique", "");  
  52.     }  
  53.   
  54. 4.数据:请求参数      public final class org.apache.http.params.  
  55.   
  56.                    BasicHttpParams extends org.apache.http.params.AbstractHttpParams        implements java.io.Serializable, java.lang.Cloneabl  
  57.   
  58.             请求参数是对请求规格进行封装:  
  59.   
  60.             HttpParams params = new BasicHttpParams();//   
  61.   
  62.             HttpConnectionParams.setConnectionTimeout(params, 8000);   //连接超时  
  63.   
  64.             HttpConnectionParams.setSoTimeout(params, 5000);   //响应超时  
  65.   
  66. 5.实体:请求体          public class org.apache.http.client.entity.  
  67.   
  68.                    UrlEncodedFormEntity extends StringEntity  
  69.   
  70.                                 StringEntity extends AbstractHttpEntity           implements java.lang.Cloneable  
  71.   
  72.             请求体是HttpPost请求特有的数据封装体:  
  73.   
  74.             ArrayList<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();  
  75.   
  76.             HttpEntity entity = new UrlEncodedFormEntity(pairList,"UTF-8");  
  77.   
  78.             post.setEntity(entity);  
  79.   
  80. 响应  
  81.   
  82. 1.响应   public abstract interface org.apache.http.  
  83.   
  84.                HttpResponse extends HttpMessage  
  85.   
  86.             响应是对诸多返回结果的封装体:  
  87.   
  88.              HttpResponse response = client.execute(post);  
  89.   
  90.              返回状态行:StatusLine      response.getStatusLine();  
  91.   
  92.              返回状态码:int                    statusLine.getStatusCode();  
  93.   
  94.              返回数据实体:response.getEntity();  

二、HttpClient 的HttpGet和HttpPost的示例代码。

[java] view plaincopy
  1. import java.io.IOException;  
  2. import java.util.ArrayList;  
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5. import org.apache.http.HttpEntity;  
  6. import org.apache.http.HttpResponse;  
  7. import org.apache.http.HttpStatus;  
  8. import org.apache.http.client.ClientProtocolException;  
  9. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  10. import org.apache.http.client.methods.HttpGet;  
  11. import org.apache.http.client.methods.HttpPost;  
  12. import org.apache.http.impl.client.DefaultHttpClient;  
  13. import org.apache.http.message.BasicHeader;  
  14. import org.apache.http.message.BasicNameValuePair;  
  15. import org.apache.http.params.BasicHttpParams;  
  16. import org.apache.http.params.HttpConnectionParams;  
  17. import org.apache.http.params.HttpParams;  
  18. import org.apache.http.util.EntityUtils;  
  19. import org.json.JSONException;  
  20. import android.content.Context;  
  21. import android.net.ConnectivityManager;  
  22. import android.net.NetworkInfo;  
  23. import android.util.Log;  
  24. import android.widget.Toast;  
  25. import com.xiaoo.R;  
  26. import com.xiaoo.vo.RequestVo;  
  27.   
  28. /** 
  29.  * 网络工具类: 
  30.  * 1.判断网络是否可用; 
  31.  * 2.get请求; 
  32.  * 3.post请求; 
  33.  * @author xiaoo 
  34.  * 
  35.  */  
  36. public class NetUtil {  
  37.     private static BasicHeader[] headers = new BasicHeader[10];  
  38.     static {  
  39.         headers[0] = new BasicHeader("Appkey""");  
  40.         headers[1] = new BasicHeader("Udid""");  
  41.         headers[2] = new BasicHeader("Os""");  
  42.         headers[3] = new BasicHeader("Osversion""");  
  43.         headers[4] = new BasicHeader("Appversion""");  
  44.         headers[5] = new BasicHeader("Sourceid""");  
  45.         headers[6] = new BasicHeader("Ver""");  
  46.         headers[7] = new BasicHeader("Userid""");  
  47.         headers[8] = new BasicHeader("Usersession""");  
  48.         headers[9] = new BasicHeader("Unique""");  
  49.     }  
  50.       
  51.        /** 
  52.         * get请求 
  53.         * @param RequestVo json数据的解析目标对象; 
  54.         * @return object 返回  与RequestVo对应的object 
  55.         */  
  56.     public static boolean hasNetwork(Context context){  
  57.         ConnectivityManager con = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);  
  58.         NetworkInfo workinfo = con.getActiveNetworkInfo();  
  59.         if(workinfo == null || !workinfo.isAvailable())  
  60.         {  
  61.             Toast.makeText(context, R.string.net_error, Toast.LENGTH_SHORT).show();  
  62.             return false;  
  63.         }  
  64.         return true;  
  65.     }  
  66.   
  67.   
  68.         public static Object get(RequestVo vo){  
  69.         DefaultHttpClient client = new DefaultHttpClient();  
  70.         HttpGet get = new HttpGet(vo.context.getString(R.string.app_host).concat(vo.context.getString(vo.requestUrl)));  
  71.         get.setHeaders(headers);  
  72.         Object obj = null;  
  73.         try {  
  74.             HttpResponse response = client.execute(get);  
  75.             if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){  
  76.                 String result = EntityUtils.toString(response.getEntity(),"UTF-8");  
  77.                 Log.e(NetUtil.class.getSimpleName(), result);  
  78.                 try {  
  79.                     obj = vo.jsonParser.parseJSON(result);  
  80.                 } catch (JSONException e) {  
  81.                     Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);  
  82.                 }  
  83.                 return obj;  
  84.             }  
  85.         } catch (ClientProtocolException e) {  
  86.             e.printStackTrace();  
  87.         } catch (IOException e) {  
  88.             e.printStackTrace();  
  89.         }  
  90.         return null;  
  91.     }  
  92. /** 
  93.         * post请求:通过RequestVo对象,可以获取到请求相关信息,并设置成HTTP协议的请求属性,并请求数据 
  94.         * @param RequestVo json数据的解析目标对象; 
  95.         * @return object 返回  与RequestVo对应的object 
  96.         */  
  97.     public static Object post(RequestVo vo){  
  98.         DefaultHttpClient client = new DefaultHttpClient();  
  99.         Log.e("URL:", vo.context.getString(R.string.app_host).concat(vo.context.getString(vo.requestUrl)));  
  100.         HttpParams params = new BasicHttpParams();//   
  101.         //params = new BasicHttpParams();     
  102.           
  103.         //设置Conextion超时时间和Socket超时时间;  
  104.         HttpConnectionParams.setConnectionTimeout(params, 8000);   //连接超时  
  105.         HttpConnectionParams.setSoTimeout(params, 5000);   //响应超时  
  106.          
  107.         //拿到app_host,并追加requestUrl,组成请求对象HttpPost;  
  108.         HttpPost post = new HttpPost(vo.context.getString(R.string.app_host).concat(vo.context.getString(vo.requestUrl)));  
  109.         //给HttpPost设置BasicHttpParams,和BasicHeader[];  
  110.         post.setParams(params);  
  111.         post.setHeaders(headers);  
  112.           
  113.         //准备一个Object对象引用;  
  114.         Object obj = null;  
  115.           
  116.         try {  
  117.             /** 
  118.              * 如果请求数据映射requestDataMap不为null,就从中获取条目Map.Entry, 
  119.              * 并生成基本名值对BasicNameValueParir,并添加到数组集合中,以便创建HttpEntity; 
  120.              */  
  121.             if(vo.requestDataMap!=null){  
  122.                 HashMap<String,String> map = vo.requestDataMap;  
  123.                 ArrayList<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();  
  124.                 for(Map.Entry<String,String> entry:map.entrySet()){  
  125.                     BasicNameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue());  
  126.                     pairList.add(pair);  
  127.                 }  
  128.                 //把BasicNameValuePair数组集合,以"UTF-8"编码,编码成Url HttpEntity;  
  129.                 HttpEntity entity = new UrlEncodedFormEntity(pairList,"UTF-8");  
  130.                 post.setEntity(entity);  
  131.                 //StringEntity  
  132.             }  
  133.             //让DefaultHttpClient执行HttpPost,完成请求post;  
  134.             HttpResponse response = client.execute(post);//包含响应的状态和返回的结果==  
  135.             if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){  
  136.                 String result = EntityUtils.toString(response.getEntity(),"UTF-8");  
  137.                 Log.e(NetUtil.class.getSimpleName(), result);  
  138.                 try {  
  139.                     obj = vo.jsonParser.parseJSON(result);  
  140.                 } catch (JSONException e) {  
  141.                     Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);  
  142.                 }  
  143.                 return obj;  
  144.             }  
  145.         } catch (ClientProtocolException e) {  
  146.             Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);  
  147.         } catch (IOException e) {  
  148.             Log.e(NetUtil.class.getSimpleName(), e.getLocalizedMessage(),e);  
  149.         }  
  150.         return null;  
  151.     }  
  152. }  

原网址:http://blog.csdn.net/omg_2012/article/details/8042001

0 0
原创粉丝点击