在请求WebService过程中有时需要保存用户的登录信息,在web中都会自动产生一个对应的session,但android中需要自己获取session并保存,再次请求的时候带上保存的session,否则有时会获取不到已登录时的数据,此处网络请求我采用的是HttpGet,下面是登录时保存session的方法
private static final int REQUEST_TIMEOUT = 30*1000;//设置请求超时10秒钟
private static final int WAIT_TIMEOUT = 30*1000; //设置等待数据超时时间10秒钟
public static String getLogin(String name, String pwd){
String url = SERVICE_URL+ "Login" + "&UserName=" + name + "&UserPwd=" + pwd;
try {
HttpGet httpGet = new HttpGet(url);
DefaultHttpClient httpClient=getThreadSafeClient();
HttpResponse response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
result = EntityUtils.toString(entity, HTTP.UTF_8);
}
//获得Cookie
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
Cookie cookie = cookies.get(i);
cookieString = cookie.getName() + "=" + cookie.getValue() + ";domain=" +
cookie.getDomain();
}
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/**
* ThreadSafeClient
* or Invalid use of SingleClientConnManager:
* connection still allocated
* @return
*/
public static DefaultHttpClient getThreadSafeClient() {
DefaultHttpClient client = new DefaultHttpClient();
ClientConnectionManager manager = client.getConnectionManager();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, SO_TIMEOUT);
client = new DefaultHttpClient(new ThreadSafeClientConnManager(params,
manager.getSchemeRegistry()), params);
return client;
}
此处注意下次传递的是cookieString,注意格式,下面是再次请求是带上Cookie的方法,只需要传递请求的url就可以了
private static String doHttpGet(String url){
String get_result = "";
try {
HttpGet httpGet = new HttpGet(url);
//设置Cookie
httpGet.setHeader("Cookie", cookieString);
HttpResponse response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
get_result = EntityUtils.toString(entity, HTTP.UTF_8);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return get_result;
}