इसकी 'मुझे कुछ घंटों लिया लेकिन मैं एक कस्टम कुकी भंडारण अपने आप का निर्माण करने में कामयाब रहे।
public class application extends Application {
@Override
public void onCreate() {
super.onCreate();
CookieManager cmrCookieMan = new CookieManager(new MyCookieStore(this.objContext), CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(cmrCookieMan);
}
}
यहाँ वास्तविक भंडारण है::
आप ऐसा करके इस संलग्न करना
/*
* This is a custom cookie storage for the application. This
* will store all the cookies to the shared preferences so that it persists
* across application restarts.
*/
class MyCookieStore implements CookieStore {
/*
* The memory storage of the cookies
*/
private Map<URI, List<HttpCookie>> mapCookies = new HashMap<URI, List<HttpCookie>>();
/*
* The instance of the shared preferences
*/
private final SharedPreferences spePreferences;
/*
* @see java.net.CookieStore#add(java.net.URI, java.net.HttpCookie)
*/
public void add(URI uri, HttpCookie cookie) {
System.out.println("add");
System.out.println(cookie.toString());
List<HttpCookie> cookies = mapCookies.get(uri);
if (cookies == null) {
cookies = new ArrayList<HttpCookie>();
mapCookies.put(uri, cookies);
}
cookies.add(cookie);
Editor ediWriter = spePreferences.edit();
HashSet<String> setCookies = new HashSet<String>();
setCookies.add(cookie.toString());
ediWriter.putStringSet(uri.toString(), spePreferences.getStringSet(uri.toString(), setCookies));
ediWriter.commit();
}
/*
* Constructor
*
* @param ctxContext the context of the Activity
*/
@SuppressWarnings("unchecked")
public MyCookieStore(Context ctxContext) {
spePreferences = ctxContext.getSharedPreferences("CookiePrefsFile", 0);
Map<String, ?> prefsMap = spePreferences.getAll();
for(Map.Entry<String, ?> entry : prefsMap.entrySet()) {
for (String strCookie : (HashSet<String>) entry.getValue()) {
if (!mapCookies.containsKey(entry.getKey())) {
List<HttpCookie> lstCookies = new ArrayList<HttpCookie>();
lstCookies.addAll(HttpCookie.parse(strCookie));
try {
mapCookies.put(new URI(entry.getKey()), lstCookies);
} catch (URISyntaxException e) {
e.printStackTrace();
}
} else {
List<HttpCookie> lstCookies = mapCookies.get(entry.getKey());
lstCookies.addAll(HttpCookie.parse(strCookie));
try {
mapCookies.put(new URI(entry.getKey()), lstCookies);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
System.out.println(entry.getKey() + ": " + strCookie);
}
}
}
/*
* @see java.net.CookieStore#get(java.net.URI)
*/
public List<HttpCookie> get(URI uri) {
List<HttpCookie> lstCookies = mapCookies.get(uri);
if (lstCookies == null)
mapCookies.put(uri, new ArrayList<HttpCookie>());
return mapCookies.get(uri);
}
/*
* @see java.net.CookieStore#removeAll()
*/
public boolean removeAll() {
mapCookies.clear();
return true;
}
/*
* @see java.net.CookieStore#getCookies()
*/
public List<HttpCookie> getCookies() {
Collection<List<HttpCookie>> values = mapCookies.values();
List<HttpCookie> result = new ArrayList<HttpCookie>();
for (List<HttpCookie> value : values) {
result.addAll(value);
}
return result;
}
/*
* @see java.net.CookieStore#getURIs()
*/
public List<URI> getURIs() {
Set<URI> keys = mapCookies.keySet();
return new ArrayList<URI>(keys);
}
/*
* @see java.net.CookieStore#remove(java.net.URI, java.net.HttpCookie)
*/
public boolean remove(URI uri, HttpCookie cookie) {
List<HttpCookie> lstCookies = mapCookies.get(uri);
if (lstCookies == null)
return false;
return lstCookies.remove(cookie);
}
}
स्रोत
2012-09-10 13:37:13
यह अच्छी तरह से परीक्षण नहीं किया गया है, लेकिन मैं संपादन कर देंगे के रूप में मैं साथ जाने। कृपया सुधार का सुझाव दें। –
कभी-कभी मुझे आश्चर्य होता है कि क्या मैं एसडीके में लगातार कुकीज़ के रूप में मौलिक के रूप में कुछ उम्मीद करने के लिए पागल हूं ... अगर मैं किसी भी सुधार का सुझाव दे सकता हूं तो मुझे वापस पोस्ट करना होगा।इस कार्यान्वयन के साथ –
, यह सटीक यूआरआई में कुकीज़ जोड़ देगा, जिससे वे आएंगे, जिसका अर्थ है कि वे उस होस्ट पर किसी भी अन्य यूआरआई को नहीं भेजे जाएंगे। मैं उम्मीद करता हूं कि यह व्यवहार करने के लिए उत्तीर्ण यूआरआई को एक नए यूआरआई के साथ बदलने के लिए केवल मेजबान नाम शामिल है। पूर्व: वर्तमान कार्यान्वयन के साथ, यदि आप yourdomain.com/pageOne.htm पर जाते हैं, तो जब आप यूआरआई अलग होते हैं तो yourdomain.com/pageTwo.htm पर जाने पर कोई भी कुकी सेट नहीं भेजा जाएगा। कार्यान्वयन (i) के रूप में व्यवहार करने के लिए कार्यान्वयन को केवल yourdomain.com पर यूआरआई पैरामीटर को ट्रिम करना चाहिए। – Keith