Trwałe pliki cookie HttpClient Android

UPDATE: to pytanie i jego odpowiedzi nie powinny być polecane nikomu, kto to czyta. Android nie zaleca HttpClient (Czytaj: deprecated), a zamiast tego zaleca HttpUrlConnection . Dobrym przykładem bibliotek do wykorzystania są Retrofiti OkHttp. W kontekście tego pytania pliki cookie mogą być zapisywane, przechowywane i dostarczane wraz z kolejnymi zapytaniami. Nie jest to obsługiwane w sposób przejrzysty. Z OkHttp możesz użyć Interceptors .

Mam aplikację na Androida z wieloma intencjami.

Pierwsza intencja to formularz logowania, kolejne intencje opierają się na plikach cookie dostarczonych z procesu logowania.

Problem, który mam polega na tym, że pliki cookie nie wydają się być trwałe w całej intencji. Tworzę nowe HttpClients w każdej intencji(początkowo próbowałem Parcelable przesłać go do każdej intencji, co nie działało tak dobrze).

Czy ktoś ma jakieś wskazówki dla czy pliki cookie utrzymują się w różnych intencjach?

Author: Knossos, 2010-11-10

4 answers

Możesz zrobić to, co zasugerował @Emmanuel, lub przekazać BasicHttpContext Pomiędzy tworzonymi przez Ciebie Httpclientami.

Przykładowe użycie plików kontekstowych i ciasteczek, kompletny kod tutaj

    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);
 31
Author: Aaron Saunders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-30 12:04:09

Nie twórz nowych HttpClients; spowoduje to wyczyszczenie plików cookie. Użyj ponownie pojedynczego klienta HttpClient.

 22
Author: Emmanuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-10 17:04:02

Uczyń httpClient klasą singleton.

 4
Author: user569873,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-05 08:54:05

Zdefiniuj HttpClient w klasie aplikacji i użyj activity.

W Aplikacji

public class AAA extends Application {
    public HttpClient httpClient; 

    httpClient = new DefaultHttpClient(); 

W Aktywności

AAA aaa = (AAA)getApplication();
httpClient = app.httpClient;
 4
Author: panicstyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-30 13:49:52