如何使用HttpClient在android中维护会话
我正在使用如何使用HttpClient在android中维护会话,android,session,Android,Session,我正在使用HttpClient建立服务器连接,如下所示: DefaultHttpClient client = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.example.com/login"); HttpResponse response = client.execute(httppost); 服务器会话使用cookies 为了维护会话,我必须为所有后续连接使用相同的客户端。我正在做这件事,效果很
HttpClient
建立服务器连接,如下所示:
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.example.com/login");
HttpResponse response = client.execute(httppost);
服务器会话使用cookies
为了维护会话,我必须为所有后续连接使用相同的客户端。我正在做这件事,效果很好
但问题是,在android中,通常在需要时会破坏活动数据,这也会破坏HttpClient
(当我的应用程序处于baclground时),因此会话会丢失
有没有办法使HttpClient
持久化?或者我该如何解决这个案子
谢谢。据我所知,无法在活动重新启动后保存会话并重新创建 唯一的方法是将
HttpClient
代码投入服务。通过这种方式,您可以进行活动,而不必担心会话中断
您可以找到服务
文档
服务器会话使用cookie
对于Android,默认情况下Cookie是启用的,您无需担心
当然,你可以储存饼干,但我不认为它有什么原因可以帮助你解决你的问题
无论如何,这是一种获取cookie的技术:
List<Cookie> mCookies = null;
mCookies = httpclient.getCookieStore().getCookies();
if (mCookies.isEmpty()) {
Log.d("test_runner", "Cookies: None");
} else {
for (int i = 0; i < mCookies.size(); i++) {
System.out.println("- " + mCookies.get(i).toString());
Log.d("test_runner", "Cookies: [" + i + "]" + mCookies.get(i).toString());
}
}
据我所知,无法在活动重新启动后保存会话并重新创建 唯一的方法是将
HttpClient
代码投入服务。通过这种方式,您可以进行活动,而不必担心会话中断
您可以找到服务
文档
服务器会话使用cookie
对于Android,默认情况下Cookie是启用的,您无需担心
当然,你可以储存饼干,但我不认为它有什么原因可以帮助你解决你的问题
无论如何,这是一种获取cookie的技术:
List<Cookie> mCookies = null;
mCookies = httpclient.getCookieStore().getCookies();
if (mCookies.isEmpty()) {
Log.d("test_runner", "Cookies: None");
} else {
for (int i = 0; i < mCookies.size(); i++) {
System.out.println("- " + mCookies.get(i).toString());
Log.d("test_runner", "Cookies: [" + i + "]" + mCookies.get(i).toString());
}
}
最好的办法是将服务器执行的所有功能放在唯一类中,该类将由要连接的任务调用。我称这个类为WebServiceManager。此类的方法与服务器的方法完全相同 如果您想要一个独特的会话,请执行以下操作:
private static WebServiceManager wsm = null;
public static WebServiceManager getInstance() {
if (wsm == null) {
wsm = new WebServiceManager();
}
return wsm;
}
private final HttpClient httpClient;
private WebServiceManager() {
httpClient=new DefaultHttpClient();
}
然后调用webServiceManager实例的方法始终使用同一个httpclient,并保留cookie.:) 最好的办法是将服务器的所有功能放在唯一类中,该类将由要连接的任务调用。我称这个类为WebServiceManager。此类的方法与服务器的方法完全相同 如果您想要一个独特的会话,请执行以下操作:
private static WebServiceManager wsm = null;
public static WebServiceManager getInstance() {
if (wsm == null) {
wsm = new WebServiceManager();
}
return wsm;
}
private final HttpClient httpClient;
private WebServiceManager() {
httpClient=new DefaultHttpClient();
}
然后调用webServiceManager实例的方法始终使用同一个httpclient,并保留cookie.:)