Android HttpClient cookies persistenti

AGGIORNA: Questa domanda e le sue risposte non dovrebbero più essere raccomandato a chiunque la lettura di questo. Android non più consiglia HttpClient (leggi: deprecato), e suggerisce, invece, HttpUrlConnection. Un buon esempio di librerie da utilizzare ora, sono Retrofit e OkHttp. Nel contesto della presente domanda, i cookie possono essere salvati, inviati con le query successive. Questo non è gestita in modo trasparente. Con OkHttp è possibile utilizzare Intercettori.

Ho un’applicazione Android con più di intenti.

Il primo intento è di un modulo di login, le successive intenti, si basa sui cookie forniti dal processo di login.

Il problema che sto avendo è che i cookie non sembrano essere persistenti in tutto il intenti. Io sono la creazione di nuovi HttpClients in ogni intento (inizialmente ho provato a Parcelable trasmettere attraverso ogni intento, che non ha funzionato così bene).

Qualcuno ha qualche suggerimento per preparare i biscotti persistere tra gli intenti?

  • Per inciso, il più vicino che ho trovato è quello di scrivere il cookiestore condiviso preferenze.
  • Alla fine di questa discussione, sono riuscito nella mia ricerca, creando il mio classe HttpClient di metodi per impostare e ottenere la sua CookieStore. Ho fatto in modo che l’inizializzazione, il client viene recuperato automaticamente tutti i cookie dal SharedPreferences. Inoltre, prima di ogni volta che una nuova Intento è creato o quella corrente è finito, tutti i cookie vengono copiati nelle SharedPreferences.
InformationsquelleAutor Knossos | 2010-11-10

 

4 Replies
  1. 31

    Si può fare quello che @Emmanuel suggerito o si può passare il BasicHttpContext tra il HttpClients che si sta creando.

    Esempio di contesto e biscotti, codice completo qui

        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);
    • Grazie per l’informazione, che sembra essere la scelta migliore per me.
  2. 22

    Di non creare nuovi HttpClients; questo cancella i cookie. Riutilizzo di una singola HttpClient.

    • così posso fare il httpclient come statico.
    • Sì. Si potrebbe, per esempio, utilizzare un Singleton. Io di solito creare un ConnectionHelper Singleton dove posso serializzare le richieste al server.
  3. 4

    definire HttpClient in classe di Applicazione e di utilizzo in attività.

    in Applicazione

    public class AAA extends Application {
        public HttpClient httpClient; 
    
        httpClient = new DefaultHttpClient(); 

    in Attività

    AAA aaa = (AAA)getApplication();
    httpClient = app.httpClient;
    • Questa risposta è buona!!! Perché downvote?
    • Tu non hai il controllo lo stato dell’applicazione, se si utilizza questo assicuratevi di fare un null-check o un metodo in AAA per ottenere il Client con questo controllo.

Lascia un commento