1. 程式人生 > >android 保持同一Session網路請求

android 保持同一Session網路請求

遇到過這種問題,手機註冊獲取驗證碼的時候,總是說驗證碼過期,明明剛獲取的驗證碼,還是提示驗證碼過期。這種情況就是多次網路請求不在同一個Session,很可能就是用了不同的請求方法造成的(eg:httpUrlConnection和httpCilent的get請求或者post請求,建議這種情況就用同一種請求方法的post請求)

關於多次網路請求不在同一個Session(會話)的原因:每次請求的方法不同(例如:分別使用httpclient和httpUrlConnecttion等不同的網路請求方法)

使用HttpClient傳送請求、接收響應很簡單,一般需要如下幾步即可。

  1. 建立HttpClient物件。
  2. 建立請求方法的例項,並指定請求URL。如果需要傳送GET請求,建立HttpGet物件;如果需要傳送POST請求,建立HttpPost物件。
  3. 如果需要傳送請求引數,可呼叫HttpGet、HttpPost共同的setParams(HetpParams params)方法來新增請求引數;對於HttpPost物件而言,也可呼叫setEntity(HttpEntity entity)方法來設定請求引數。
  4. 呼叫HttpClient物件的execute(HttpUriRequest request)傳送請求,該方法返回一個HttpResponse。
  5. 呼叫HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取伺服器的響應頭;呼叫HttpResponse的getEntity()方法可獲取HttpEntity物件,該物件包裝了伺服器的響應內容。程式可通過該物件獲取伺服器的響應內容。
  6. 釋放連線。無論執行方法是否成功,都必須釋放連線

簡單封裝post請求

public class HttpUtils {

    // 建立HttpClient物件
    public static HttpClient httpClient = new DefaultHttpClient();
    //服務端返回的String
    public static String str;

    /*
     * 封裝post請求
     */
    public static String httpPost(final String url,
            final List<NameValuePair> list_params) {

                try
{ // 得到HttpPost物件 HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(list_params, HTTP.UTF_8)); // 客戶端使用POST方式執行請求,獲得伺服器端的迴應response HttpResponse respone = httpClient.execute(httpPost); // 判斷是否請求成功 if (respone.getStatusLine().getStatusCode() == 200) { // 獲取輸入流 InputStream inStream = respone.getEntity().getContent(); int len; byte b[] = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((len = inStream.read(b)) != -1) { bos.write(b, 0, len); } str = bos.toString(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return str; } }

在需要網路請求的地方呼叫

    new Thread() {
            public void run() {
            //請求引數
                List<NameValuePair> list_params = new ArrayList<NameValuePair>();
                list_params.add(new BasicNameValuePair("uname", "xiaomeng"));
                list_params.add(new BasicNameValuePair("loginPassword",
                        "123456"));
                String response = HttpUtils.httpPost(url, list_params);
                Log.i(TAG, response);
            };
        }.start();