2012-05-15 219 views
12

對於Android CookieManager類有一種方法 - getCookie(String url)
爲此,我們需要知道正確的網址。
有沒有辦法讓CookieManager中的所有cookies和獲取網址。 有點像getCookies? 這只是仔細檢查,如果我給url撥打getCookie(String url)致電給我錯誤。 當我打電話給我時,我沒有收到cookie。
我在URL中傳遞完整的IP address。事情是這樣的:"xx.x.x.x"如何從CookieManager android獲取所有cookie?

感謝
米婭

+0

我努力後成功的登錄 - 其簡單提取的WebView餅乾 - 字符串cookieString = CookieManager.getInstance()的getCookie(「xx.xxx); – mia

回答

0

您可以use reflection看到餅乾地圖。它在4.0.3中被稱爲mCookieMap(也可能在早期版本中)。類型是Map>。

這不是一個很好的做法,因爲如果不使用mCookieMap,你將冒險破壞不同的設備或操作系統版本,但CookieManager不提供公開的方式來知道它訪問過哪些URL。

+0

在4.2餅乾。 .2本地存儲,所以這不起作用:http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/webkit/CookieManagerClassic.java – plinehan

+1

我知道它最終會崩潰。 :-) –

3

我在我的Android應用程序中使用了CookieManager與java.net包,它的工作原理就像一個魅力。下面的代碼片段:

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 當我想要使用getCookieValue()時,我必須創建MyCookieManager類的對象,並且constructer將被調用,並且每次CookieManager的新時刻都將生成,但不保存cookie。默認CookieManager,我以前存儲Cookie? –

+0

@HarshalBhatt,假設你在你的應用程序中創建並保存了一個'MyCookieManager'實例。無論如何,所有實例通常都應該從默認cookie存儲(或者自定義存儲,如果您將源更改爲在CookieManager構造函數中提供特定存儲)返回相同的一組Cookie。 – Stan