Abbastanza divertente, ma java.net.HttpCookie
classe non può analizzare le stringhe di cookie con il dominio e/o parti di percorso che questo esatto classe java.net.HttpCookie
ha convertite in stringhe.
Ad esempio:
HttpCookie newCookie = new HttpCookie("cookieName", "cookieValue");
newCookie.setDomain("cookieDomain.com");
newCookie.setPath("/");
Dato che questa classe implementa Serializable né né Parcelable, si sta tentando di memorizzare i cookie come stringhe. Così si scrive qualcosa di simile:
saveMyCookieAsString(newCookie.toString());
Questa dichiarazione salverà il cookie nel seguente formato:
cookieName="cookieValue";$Path="/";$Domain="cookiedomain.com"
E poi si desidera ripristinare questo cookie, in modo da ottenere la stringa:
String cookieAsString = restoreMyCookieString();
e cercare di analizzarlo:
List<HttpCookie> cookiesList = HttpCookie.parse(cookieAsString);
StringBuilder myCookieAsStringNow = new StringBuilder();
for(HttpCookie httpCookie: cookiesList) {
myCookieAsStringNow.append(httpCookie.toString());
}
ora myCookieAsStringNow.toString();
produce
cookieName=cookieValue
di dominio e il percorso parti sono solo andati. Il motivo: il metodo parse è sensibile al maiuscolo/minuscolo per parole come "dominio" e "percorso". metodo di fornire un altro toString() come::
possibile soluzione
public static String httpCookieToString(HttpCookie httpCookie) {
StringBuilder result = new StringBuilder()
.append(httpCookie.getName())
.append("=")
.append("\"")
.append(httpCookie.getValue())
.append("\"");
if(!TextUtils.isEmpty(httpCookie.getDomain())) {
result.append("; domain=")
.append(httpCookie.getDomain());
}
if(!TextUtils.isEmpty(httpCookie.getPath())){
result.append("; path=")
.append(httpCookie.getPath());
}
return result.toString();
}
trovo divertente (soprattutto, per le classi come java.net.HttpCookie
che mirano ad essere utilizzato da un sacco e molte persone) e spero che sarà utile per qualcuno
Quale client HTTP utilizzate? Android viene fornito con Apache Commons HttpClient. – BalusC
Sto usando HttpClient per le connessioni, ma ho usato CookieSyncManager per mantenere i cookie. Al momento non sto utilizzando il CookieStore di HttpClient. – cottonBallPaws