Android HttpClient постоянные куки - PullRequest
37 голосов
/ 10 ноября 2010

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

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

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

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

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

Ответы [ 4 ]

31 голосов
/ 10 ноября 2010

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

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

    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);
22 голосов
/ 10 ноября 2010

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

4 голосов
/ 30 марта 2013

определить HttpClient в классе приложения и использовать его в действии.

в приложении

public class AAA extends Application {
    public HttpClient httpClient; 

    httpClient = new DefaultHttpClient(); 

в действии

AAA aaa = (AAA)getApplication();
httpClient = app.httpClient;
4 голосов
/ 16 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...