使用HttpUrlConnection取代Apache Http Client

Android HttpClient 替代方案
本文介绍了在Android 6.0之后由于废弃了Apache HttpClient,如何通过两种方法来实现HTTP请求的功能。一种方法是在开发环境中引入特定的类库,另一种则是使用HttpUrlConnection替代原有的HttpClient。文中详细解释了如何使用HttpUrlConnection发起POST请求的具体步骤。

这里面有两种方法可做:1.添加该类库;2.使用HttpUrlConnnection进行替代。

1.在开发工具中添加该jar包

Android Studio可以在gradle文件中简单的添加

android {
    useLibrary 'org.apache.http.legacy'
}

Eclipse中,将**\android-sdk\platforms\android-23\optional下org.apache.http.legacy.jar放入libs文件夹中。

评论:既然Android6.0抛弃了Apache Http Client,则能不用就不用吧。解决方式是使用HttpUrlConnection进行替代。

1.使用HttpUrlConnection向服务器端发起请求

 public static JSONObject doPost(String urlInString,
                                    Map<String,String> paramsMap) {

  //这里用于组装要传递的参数
//虽然也可以直接将参数拼接到urlInString后面,如果涉及到传递的参数中,有汉字,就会出现???问题
//如果要传递的参数中包含&这种特殊字符,就需要使用UrlEncode来进行处理了
         StringBuilder stringBuilder=new StringBuilder();
        if (paramsMap != null && paramsMap.size() > 0) {
            Iterator<Map.Entry<String, String>> iterator = paramsMap.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, String> entry = iterator.next();
                try {
                    String key=entry.getKey();
                    stringBuilder.append(key);
                    stringBuilder.append("=");
                    String value=  URLEncoder.encode(entry.getValue(), "UTF-8");
                    stringBuilder.append(value);
                    stringBuilder.append("&");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
        String paramsContent=stringBuilder.toString();
        try {
            URL url = new URL(urlInString);
           HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5 * 1000);
            conn.setRequestMethod("POST");
//和服务器建立连接后,下面向服务器端传递参数
            if(!TextUtils.isEmpty(paramsContent)) {
                DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8"));
                writer.write(paramsContent);
                writer.close();
                wr.close();
            }
//读取从服务器端返回的数据
            InputStream inStream = conn.getInputStream();
            if (conn != null && conn.getResponseCode() == 200) {
                byte[] buffer = new byte[1024*8];
                int readedByte = -1;
                ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
                while ((readedByte = inStream.read(buffer)) > 0) {
                    byteStream.write(buffer, 0, readedByte);
                }
                byte[] resultInByte = byteStream.toByteArray();
                String resultInString = new String(resultInByte, "UTF-8");
                if (resultInString.startsWith("{")) {
                    try {
                        return new JSONObject(resultInString);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

2.使用HttpUrlConnections向服务器端发起请求

持续更新中敬请期待!

参考内容:

http://stackoverflow.com/questions/18759199/java-utf-8-encoding-not-working-httpurlconnection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值