如何使用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.:)