使用HttpUrlConnection取代Apache Http Client

这里面有两种方法可做: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

你可能感兴趣的:(Android6-0)