android 保持同一Session網路請求
阿新 • • 發佈:2019-01-07
遇到過這種問題,手機註冊獲取驗證碼的時候,總是說驗證碼過期,明明剛獲取的驗證碼,還是提示驗證碼過期。這種情況就是多次網路請求不在同一個Session,很可能就是用了不同的請求方法造成的(eg:httpUrlConnection和httpCilent的get請求或者post請求,建議這種情況就用同一種請求方法的post請求)
關於多次網路請求不在同一個Session(會話)的原因:每次請求的方法不同(例如:分別使用httpclient和httpUrlConnecttion等不同的網路請求方法)
使用HttpClient傳送請求、接收響應很簡單,一般需要如下幾步即可。
- 建立HttpClient物件。
- 建立請求方法的例項,並指定請求URL。如果需要傳送GET請求,建立HttpGet物件;如果需要傳送POST請求,建立HttpPost物件。
- 如果需要傳送請求引數,可呼叫HttpGet、HttpPost共同的setParams(HetpParams params)方法來新增請求引數;對於HttpPost物件而言,也可呼叫setEntity(HttpEntity entity)方法來設定請求引數。
- 呼叫HttpClient物件的execute(HttpUriRequest request)傳送請求,該方法返回一個HttpResponse。
- 呼叫HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取伺服器的響應頭;呼叫HttpResponse的getEntity()方法可獲取HttpEntity物件,該物件包裝了伺服器的響應內容。程式可通過該物件獲取伺服器的響應內容。
- 釋放連線。無論執行方法是否成功,都必須釋放連線
簡單封裝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();