2012-05-15 19 views
12

Para la clase Android CookieManager hay un método - getCookie(String url).
Para esto necesitamos saber la URL correcta.
¿Hay alguna manera de obtener todas las cookies en CookieManager y obtener las direcciones URL? algo así como getCookies ?? Esto es solo para verificar si estoy dando algo mal en mi llamada url para getCookie(String url). No obtengo la cookie cuando llamo de la misma manera.
Estoy pasando completa IP address aquí en url. Algo como esto: "xx.x.x.x"¿Cómo obtener todas las cookies de CookieManager para Android?

Gracias
Mia

+0

estoy tratando de extraer cookie de vista web después de exitosa login- su simple - Cadena cookieString = CookieManager.getInstance() GetCookie ("xx.xxx); – mia

Respuesta

0

Puede use reflection para ver el mapa de galletas. Se llama mCookieMap en 4.0.3 (y probablemente en versiones anteriores también). El tipo es Mapa>.

Esta no es una gran manera de hacerlo porque correrá el riesgo de romper en diferentes dispositivos o versiones de sistema operativo si no usan mCookieMap, pero CookieManager no ofrece una forma pública de saber qué URLs visitó.

+0

Las cookies en 4.2. .2 se almacenan de forma nativa, por lo que esto no funcionará: http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/webkit/CookieManagerClassic.java – plinehan

+1

Sabía que se rompería eventualmente. :-) –

3

Utilicé el CookieManager con el paquete java.net en mi aplicación para Android y funciona como un encanto. Aquí es un fragmento de código:

import java.net.CookieHandler; 
import java.net.CookieManager; 
import java.net.CookiePolicy; 
import java.net.HttpCookie; 
import java.util.List; 

private class MyCookieManager 
{  
    private CookieManager mCookieManager = null; 

    MyCookieManager() { 
     mCookieManager = new CookieManager(); 
     mCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 
     CookieHandler.setDefault(mCookieManager); 
    } 

    private List<HttpCookie> getCookies() { 
     if(mCookieManager == null) 
      return null; 
     else 
      return mCookieManager.getCookieStore().getCookies(); 
    } 

    public void clearCookies() { 
     if(mCookieManager != null) 
      mCookieManager.getCookieStore().removeAll(); 
    } 

    public boolean isCookieManagerEmpty() { 
     if(mCookieManager == null) 
      return true; 
     else 
      return mCookieManager.getCookieStore().getCookies().isEmpty(); 
    } 


    public String getCookieValue() { 
     String cookieValue = new String(); 

     if(!isCookieManagerEmpty()) { 
      for (HttpCookie eachCookie : getCookies()) 
       cookieValue = cookieValue + String.format("%s=%s; ", eachCookie.getName(), eachCookie.getValue()); 
     } 

     return cookieValue; 
    } 

} 
+0

@stan cuando quiero usar getCookieValue(), tengo que crear el objeto de la clase MyCookieManager y se llamará a constructer y cada vez que se genere un nuevo instante de CookieManager sin guardar la cookie. ¿Cómo puedo recuperar la cookie de CookieManager predeterminado donde almacené previamente cookie? –

+0

@HarshalBhatt, se supone que creas y mantienes una sola instancia de 'MyCookieManager' en tu aplicación. De todos modos, todas las instancias normalmente deberían devolver el mismo conjunto de cookies del almacén de cookies predeterminado (o una tienda personalizada si cambias el origen para proporcionar una tienda específica en el constructor 'CookieManager'). – Stan

Cuestiones relacionadas