zoukankan      html  css  js  c++  java
  • 【一找客户端】针对网络连接的封装

    andorid框架中加入了org.apache.http包。这样就可以使用apache包中关于HTTP的内容, 极大的方便了针对HTTP协议的开发。

    在一找客户端中不仅仅使用apache的方法,而已在apache的基础之上,就对其进行一次封装。 这就是本篇所要介绍的内容。

    代码分析。 

    1。HttpManager工具类的代码使用

            //传递的参数
    List<NameValuePair> params = new ArrayList<NameValuePair>();

    //s为接到的返回值
    String s = new HttpManager(Const.HOT_URL).submitRequest(params);

    2。 HttpManager的初始化

        public HttpManager(String url_in) {
    init(url_in);
    }

    /**
    * 初始化参数
    *
    @param url
    */
    private void init(String url_in){
    this.url = url_in;
    Log.d(Const.TAG, "HttpManager.init|url="+url_in);
    try {
    httpclient = new DefaultHttpClient(); //设置本地为客户端
    httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, Const.TIMEOUT_15);//请求超时
    httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, Const.TIMEOUT_15); //读取超时
    httpPost = new HttpPost(url); //新建一个Post请求
    }catch (Exception e) {
    httpPost.abort();
    Log.e(Const.TAG, "网络连接不正常!");
    }
    }


    3。 发送Post请求

        /**
    * 提交HTTP请求
    *
    @param params 请求参数
    *
    @return
    */
    public String submitRequest(List<NameValuePair> params){

    String res_str = null; //收到的结果

    if(httpclient!=null && httpPost!=null && !httpPost.isAborted()){

    //设置httpPost请求参数及编码
    try {
    //用确定编码格式来把参数进行编码
    httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
    } catch (UnsupportedEncodingException e1) {
    Log.e(Const.TAG, "输入参数编码有问题:UnsupportedEncodingException");
    return res_str;
    }

    //第二步,使用execute方法发送HTTP POST请求,并返回HttpResponse对象
    try {
    httpResponse =httpclient.execute(httpPost);
    } catch (ClientProtocolException e) {
    Log.e(Const.TAG, "服务器无应答:ClientProtocolException");
    return res_str;
    } catch (IOException e) {
    Log.e(Const.TAG, "服务器无应答:IOException");
    return res_str;
    } catch (Exception e) {
    Log.e(Const.TAG, "服务器无应答:OtherException");
    return res_str;
    }

    //返回结果为200时,处于正常状态。
    if(httpResponse!=null && (httpResponse.getStatusLine().getStatusCode() == 200)){

    //第三步,使用getEntity方法活得返回结果
    try {
    res_str = EntityUtils.toString(httpResponse.getEntity(),HTTP.UTF_8);
    } catch (ParseException e) {
    Log.e(Const.TAG, "返回结果转换异常:ParseException");
    e.printStackTrace();
    }catch (IOException e) {
    Log.e(Const.TAG, "返回结果输出异常:IOException");
    }catch (Exception e) {
    Log.e(Const.TAG, "返回结果异常:OtherException");

    }
    }

    httpPost.abort();

    //强制关闭连接
    httpclient.getConnectionManager().closeExpiredConnections();

    }

    Log.d(Const.TAG, "HttpManager.res_str="+res_str);

    return res_str;
    }

    4。 获取返回值的长度。 

        /**
    * 获取返回内容长度
    *
    @return
    */
    public long getContentLength(){

    long len = -1;

    if(httpclient!=null && httpPost!=null && !httpPost.isAborted()){

    //设置httpPost请求参数及编码
    try {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
    } catch (UnsupportedEncodingException e1) {
    Log.e(Const.TAG, "getContentLength 输入参数编码有问题:UnsupportedEncodingException");
    return len;
    }

    //第二步,使用execute方法发送HTTP POST请求,并返回HttpResponse对象
    try {
    httpResponse =httpclient.execute(httpPost);
    } catch (ClientProtocolException e) {
    Log.e(Const.TAG, "getContentLength 服务器无应答:ClientProtocolException");
    } catch (IOException e) {
    Log.e(Const.TAG, "getContentLength 服务器无应答:IOException");
    } catch (Exception e) {
    Log.e(Const.TAG, "getContentLength 服务器无应答:OtherException");
    }

    if(httpResponse!=null && (httpResponse.getStatusLine().getStatusCode() == 200)){

    //第三步,使用getEntity方法活得返回结果
    try {
    HttpEntity httpEntity = httpResponse.getEntity();
    len = httpEntity.getContentLength();
    } catch (Exception e) {
    Log.e(Const.TAG, "getContentLength 返回结果异常:OtherException");
    }
    }

    httpPost.abort();

    httpclient.getConnectionManager().closeExpiredConnections();

    }

    Log.d(Const.TAG, "HttpManager.getContentLength|len="+len);

    return len;
    }


    PS: 追后,还是附上
    【一找客户端】工程代码。注意查看代码:HttpManager

  • 相关阅读:
    struts2的结果类型
    struts2的基本配置
    struts2拦截器
    struts2入门程序
    struts2工作原理
    Mysql处理字符串函数(转)
    oracle调用java方法的例子(下面所有代码都是在sql/plus中写)
    Oracle数据库中调用Java类开发存储过程、函数的方法
    Oracle触发器反向调用Java程序
    javaweb项目打包成war包
  • 原文地址:https://www.cnblogs.com/xitang/p/2184633.html
Copyright © 2011-2022 走看看