您的位置:首页 > 理论基础 > 计算机网络

Android网络请求工具类

2015-08-06 16:48 267 查看
半个月前,让给公司一个新模块建个项目,到现在这个项目结构还是有很多不足的地方。比如说数据的本地缓存还有挺多的问题。

今天后台服务器的接口崩的很厉害,完全取不到数据,任务里还有一个小模块的UI设计跟数据也不匹配只能先放着了 ,来写几篇blog吧

说了点废话,开始主题吧:

如今移动APP项目中几乎没有不用网络的吧,所以一个获取json数据的网络工具类必不可少。

而网络请求工具类的功能就是封装 几个请求的方法,一般常用的有get,post等。(delete及其他都没用过……)

POST请求(常用):

/**
     * 用来获取服务端响应信息
     * 
     * @param url
     *            请求服务端地址
     * @param params
     *            请求参数:以键值对方式保存
     * @return String 返回对应的JSON字符串
     * @throws
     */
    public static String getJSONData(String url, HashMap<String, String> params) {
        HttpPost post = new HttpPost(url);
        HttpClient httpclient = new DefaultHttpClient();
        // 请求超时
        httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, StringConstant.CONNECTION_TIME_OUT);
        // 读取超时
        httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, StringConstant.READ_TIME_OUT);

        ArrayList<NameValuePair> paramPairs = new ArrayList<NameValuePair>();
        if (params != null && !params.isEmpty()) {// 判断params请求参数是否为空
            for (Entry<String, String> entry : params.entrySet()) {// 如果不为空的话,
                // 需要迭代,加入到ArrayList<NameValuePair>对象中
                paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
            }
        }
        try {
            post.setEntity(new UrlEncodedFormEntity(paramPairs,StringConstant.HTTP_UTF8));
        } catch (UnsupportedEncodingException e) {
            Log.d("HttpDataUtilexception", e.getMessage());
            return null;
        }
        try {
            HttpResponse response;
            // 执行请求,获取响应
            response = httpclient.execute(post);
            String inf = "";
            int code = response.getStatusLine().getStatusCode();
            Log.d("code", code+"");
            if (code == StringConstant.RESPONSE_CODE) {// 判断响应状态码
                inf = EntityUtils.toString(response.getEntity());
//              Log.d("result", "result:" + inf);
                return inf;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


POST请求有很多优点,一来它很少产生乱码,它用实体保存你给的参数,也要比GET方法安全得多。但是有一些请求是不兼容POST的,所以GET方法还是有必要的。

/**
     * get 请求
     * @param url
     * @param params
     * @return
     */
    public static String HttpDataforGet(String url, HashMap<String, String> params) {
        HttpClient httpclient = new DefaultHttpClient();
        // 请求超时
        httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, StringConstant.CONNECTION_TIME_OUT);
        // 读取超时
        httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, StringConstant.READ_TIME_OUT);

        StringBuffer sbu = new StringBuffer();
        if (params != null && !params.isEmpty()) {// 判断params请求参数是否为空
            for (Entry<String, String> entry : params.entrySet()) {// 如果不为空的话,
                try {
                    //将参数转化为utf-8,并将 +号 转化回 =号 
                    sbu.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8").replace("+", "%2B")).append("&");
                }catch(Exception e) {
                    e.printStackTrace();
                }

            }
            url += sbu.toString();
        }
        try {
            HttpGet get = new HttpGet(url);
            HttpResponse response;
            // 执行请求,获取响应
            response = httpclient.execute(get);
            String inf = "";
            int code = response.getStatusLine().getStatusCode();
            Log.d("code", code+"");
            if (code == StringConstant.RESPONSE_CODE) {// 判断响应状态码
                inf = EntityUtils.toString(response.getEntity());
//              Log.d("result", "result:" + inf);
                return inf;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: