vui đủ, nhưng java.net.HttpCookie
lớp không thể phân tích chuỗi cookie với tên miền và/hoặc các bộ phận con đường mà java.net.HttpCookie
lớp này chính xác đã chuyển đổi sang chuỗi.
Ví dụ:
HttpCookie newCookie = new HttpCookie("cookieName", "cookieValue");
newCookie.setDomain("cookieDomain.com");
newCookie.setPath("/");
Như lớp này thực hiện không Serializable cũng không Parcelable, nó hấp dẫn để lưu trữ các tập tin cookie như dây đàn. Vì vậy, bạn viết một cái gì đó như:
saveMyCookieAsString(newCookie.toString());
Tuyên bố này sẽ tiết kiệm được cookie theo định dạng sau:
cookieName="cookieValue";$Path="/";$Domain="cookiedomain.com"
Và sau đó bạn muốn khôi phục lại cookie này, vì vậy bạn sẽ có được chuỗi:
String cookieAsString = restoreMyCookieString();
và cố gắng phân tích cú pháp:
List<HttpCookie> cookiesList = HttpCookie.parse(cookieAsString);
StringBuilder myCookieAsStringNow = new StringBuilder();
for(HttpCookie httpCookie: cookiesList) {
myCookieAsStringNow.append(httpCookie.toString());
}
tại myCookieAsStringNow.toString();
sản xuất
cookieName=cookieValue
miền và đường dẫn phần chỉ đi. Lý do: phương pháp phân tích cú pháp phân biệt chữ hoa chữ thường với các từ như "tên miền" và "đường dẫn".
thể workaround: cung cấp toString khác() phương pháp như:
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();
}
tôi thấy nó buồn cười (đặc biệt là cho các lớp học như java.net.HttpCookie
mà là nhằm mục đích để được sử dụng bởi rất nhiều và rất nhiều người) và tôi hy vọng nó sẽ được hữu ích cho ai đó.
Bạn đang sử dụng ứng dụng khách HTTP nào? Android tàu với Apache Commons HttpClient. – BalusC
Tôi đang sử dụng HttpClient cho các kết nối nhưng tôi đã sử dụng CookieSyncManager để duy trì các cookie. Tôi không sử dụng CookieStore của HttpClient vào lúc này. – cottonBallPaws