Android網路請求工具類
阿新 • • 發佈:2019-02-19
半個月前,讓給公司一個新模組建個專案,到現在這個專案結構還是有很多不足的地方。比如說資料的本地快取還有挺多的問題。
今天后臺伺服器的介面崩的很厲害,完全取不到資料,任務裡還有一個小模組的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;
}