1. 程式人生 > >Android網路請求工具類

Android網路請求工具類

半個月前,讓給公司一個新模組建個專案,到現在這個專案結構還是有很多不足的地方。比如說資料的本地快取還有挺多的問題。

今天后臺伺服器的介面崩的很厲害,完全取不到資料,任務裡還有一個小模組的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;
    }