HttpURLConnection
在android 2.2及以下版本中HttpUrlConnection存在著一些bug(建議使用HttpClient)
建議在android 2.3以后使用HttpUrlConnection
特點
? 比較輕便口蝠,靈活避咆,易于擴(kuò)展
? 在3.0后以及4.0中都進(jìn)行了改善,如對HTTPS的支持
? 在4.0中俐筋,還增加了對緩存的支持
HttpClient(不推薦使用了)
特點
? 高效穩(wěn)定静秆,但是維護(hù)成本高昂粮揉,故android 開發(fā)團(tuán)隊不愿意在維護(hù)該庫而是轉(zhuǎn)投更為輕便的
在android2.3之后就被HttpUrlConnection取代了
OK,扯了這么多诡宗,直接開始實戰(zhàn)滔蝉。
前期準(zhǔn)備
開發(fā)工具:Eclipse(ADT Build: v22.6.2-1085508)
開發(fā)環(huán)境:OS X EI Capitan 版本 10.11.5
搭建一個本地的測試服務(wù)用來測試訪問
首先安裝MAMP,用來部署測試數(shù)據(jù):
Paste_Image.png
傳送門:https://www.mamp.info/en/
配置端口
Paste_Image.png
文件部署目錄
Paste_Image.png
Paste_Image.png
get_data.json文件從項目Assets目錄下獲取
Paste_Image.png
OK塔沃,前期準(zhǔn)備工作完畢。
代碼演示
源碼地址
https://github.com/andli0626/HttpClientAndHttpUrlConnection.git
實際效果
Paste_Image.png
HttpURLConnection請求:GET 核心代碼
private void sendRequestWithHttpURLConnection() {
// 開啟線程來發(fā)起網(wǎng)絡(luò)請求
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try {
// 獲得URL對象
URL url = new URL("http://www.baidu.com/");
// 獲得HttpURLConnection對象
connection = (HttpURLConnection) url.openConnection();
// 默認(rèn)為GET請求
connection.setRequestMethod("GET");
// 設(shè)置 鏈接 超時時間
connection.setConnectTimeout(8000);
// 設(shè)置 讀取 超時時間
connection.setReadTimeout(8000);
// 設(shè)置是否從HttpURLConnection讀入阳谍,默認(rèn)為true
connection.setDoInput(true);
connection.setDoOutput(true);
// 請求相應(yīng)碼是否為200(OK)
if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
// 下面對獲取到的輸入流進(jìn)行讀取
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
Message message = new Message();
message.what = SHOW_RESPONSE1;
message.obj = response.toString();
handler.sendMessage(message);
}else{
Message message = new Message();
message.what = SHOW_RESPONSE3;
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 關(guān)閉連接
if (connection != null) {
connection.disconnect();
}
}
}
}).start();
}
HttpClient GET請求核心代碼
private void sendRequestWithHttpClient() {
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpClient = new DefaultHttpClient();
// 指定訪問的服務(wù)器地址是電腦本機(jī)
// 注意:由于是本機(jī)測試蛀柴,所以測試設(shè)備和接口必須在同一網(wǎng)段內(nèi),否則訪問失敗
HttpGet httpGet = new HttpGet("http://192.168.0.162:8082/get_data.json");
HttpResponse httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 請求和響應(yīng)都成功了
HttpEntity entity = httpResponse.getEntity();
String response = EntityUtils.toString(entity, "utf-8");
// 解析JSON
parseJSONWithGSON(response);
Message message = new Message();
message.what = SHOW_RESPONSE2;
message.obj = response.toString();
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}