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

使用HttpUrlConnection取代Apache Http Client

2016-02-20 14:53 645 查看
这里面有两种方法可做: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: