所以... 破解我的頭幾個小時,實現我自己的後原始的CookieStore,我發現Android Asynchronous Http Client的實現,其中包括一個很好的PersistentCookieStore,它非常棒! 簡單地添加的jar到我的項目,並用它如下:
PersistentCookieStore cookieStore = new PersistentCookieStore(context);
DefaultHttpClient mClient = new DefaultHttpClient();
mClient.setCookieStore(cookieStore);
,這就是它!當應用程序再次打開時,Cookie將被保存並重新使用。
謝謝詹姆斯史密斯,你在哪裏。你至少讓一個人開心。
如果有興趣的人在自己的原始執行(也適用),那就是:
package com.pinhassi.android.utilslib;
import java.util.Date;
import java.util.List;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class MyPersistentCookieStore extends BasicCookieStore {
private static final String COOKIES_LIST = "CookiesList";
private static final String COOKIES_NAMES = "CookiesNames";
private Context mContext;
/**
*
*/
public MyPersistentCookieStore(Context context) {
super();
mContext = context;
load();
}
@Override
public synchronized void clear(){
super.clear();
save();
}
@Override
public synchronized boolean clearExpired(Date date){
boolean res = super.clearExpired(date);
save();
return res;
}
@Override
public synchronized void addCookie(Cookie cookie){
super.addCookie(cookie);
save();
}
@Override
public synchronized void addCookies(Cookie[] cookie){
super.addCookies(cookie);
save();
}
public synchronized void save()
{
Editor editor = mContext.getSharedPreferences(COOKIES_LIST, Context.MODE_PRIVATE).edit();
editor.clear();
List <Cookie> cookies = this.getCookies();
StringBuilder sb = new StringBuilder();
for (Cookie cookie : cookies)
{
editor.putString(cookie.getName(),cookie.getValue());
sb.append(cookie.getName()+";");
}
editor.putString(COOKIES_NAMES,sb.toString());
editor.commit();
}
public synchronized void load()
{
SharedPreferences prefs = mContext.getSharedPreferences(COOKIES_LIST, Context.MODE_PRIVATE);
String [] cookies = prefs.getString(COOKIES_NAMES,"").split(";");
for (String cookieName : cookies){
String cookieValue = prefs.getString(cookieName, null);
if (cookieValue!=null)
super.addCookie(new BasicClientCookie(cookieName,cookieValue));
}
}
}
我看到DefaultHttpClient(移動客戶端在上面的代碼中)都有自己的CookieStore。我如何保存它的cookies並在下次創建時加載它們? –
爲什麼你需要這樣做?下次您將使用新的cookie。但是如果你仍然需要存儲它,你可以在例子中看到代碼,我告訴你如何去做。 – Dayerman
我需要能夠保存到cookie,所以我會知道用戶是否有服務器會話,即使用戶退出應用程序並再次打開它(我不知道如何在您發送的鏈接上執行此操作)。類似的東西在Facebook API中完成,只有他們使用Android瀏覽器才能做到。我找到了一個解決方案,並將其發佈在此處作爲答案。無論如何,謝謝你的幫助! –