Android HttpClient постоянные куки

ОБНОВЛЕНИЕ: Этот вопрос и его ответы больше не следует рекомендовать никому, кто читает это. Android больше не рекомендует HttpClient (читай: устарел) и вместо этого рекомендует HttpUrlConnection. Хорошим примером библиотек для использования сейчас являются Retrofit и OkHttp. В контексте этого вопроса куки могут быть сохранены, сохранены и доставлены с последующими запросами. Это не обрабатывается прозрачно. С OkHttp вы можете использовать перехватчики.

У меня есть приложение Android с несколькими намерениями.

Первым намерением является форма входа в систему, последующие намерения основаны на файлах cookie, предоставленных в процессе входа в систему.

Проблема, с которой я сталкиваюсь, заключается в том, что файлы cookie, похоже, не сохраняются во всех отношениях. Я создаю новые HttpClients в каждом намерении (я изначально пытался Parcelable передать его каждому намерению, что не сработало так хорошо).

У кого-нибудь есть какие-либо советы по сохранению файлов cookie для разных целей?

4 ответа

Решение

Вы можете сделать то, что предложил @Emmanuel, или передать BasicHttpContext между HttpClients, которые вы создаете.

Пример использования контекста и куки, полный код здесь

    HttpClient httpclient = new DefaultHttpClient();

    // Create a local instance of cookie store
    CookieStore cookieStore = new BasicCookieStore();

    // Create local HTTP context
    HttpContext localContext = new BasicHttpContext();
    // Bind custom cookie store to the local context
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

    HttpGet httpget = new HttpGet("http://www.google.com/", localContext);

Не создавайте новые HttpClients; это очистит куки. Повторно использовать один HttpClient.

Сделайте ваш httpClient синглтон-классом.

Определите HttpClient в классе Application и используйте активность.

в приложении

public class AAA extends Application {
    public HttpClient httpClient; 

    httpClient = new DefaultHttpClient(); 

в деятельности

AAA aaa = (AAA)getApplication();
httpClient = app.httpClient;
Другие вопросы по тегам