开发者

How to make persistent Cookies with a DefaultHttpClient in Android?

Im using

// this is a DefaultHttpClient
List<Cookie> cookies = this.getCookieStore().getCookies();

Now, since Cookie does not implement serializeable, I can't serialize that List.

EDIT: (specified my goal, not only the problem)

My goal is to use the D开发者_如何转开发efaultHttpClient with persistent cookies.

Anyone with experience that could lead me on the right track here? There might be another best practice that I haven't discovered...


Create your own SerializableCookie class which implements Serializable and just copy the Cookie properties during its construction. Something like this:

public class SerializableCookie implements Serializable {

    private String name;
    private String path;
    private String domain;
    // ...

    public SerializableCookie(Cookie cookie) {
        this.name = cookie.getName();
        this.path = cookie.getPath();
        this.domain = cookie.getDomain();
        // ...
    }

    public String getName() {
        return name;
    }

    // ...

}

Ensure that all properties itself are also serializable. Apart from the primitives, the String class for example itself already implements Serializable, so you don't have to worry about that.

Alternatively you can also wrap/decorate the Cookie as a transient property (so that it doesn't get serialized) and override the writeObject() and readObject() methods accordingly. Something like:

public class SerializableCookie implements Serializable {

    private transient Cookie cookie;

    public SerializableCookie(Cookie cookie) {
        this.cookie = cookie;
    }

    public Cookie getCookie() {
        return cookie;
    }

    private void writeObject(ObjectOutputStream oos) throws IOException {
        oos.defaultWriteObject();
        oos.writeObject(cookie.getName());
        oos.writeObject(cookie.getPath());
        oos.writeObject(cookie.getDomain());
        // ...
    }

    private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
        ois.defaultReadObject();
        cookie = new Cookie();
        cookie.setName((String) ois.readObject());
        cookie.setPath((String) ois.readObject());
        cookie.setDomain((String) ois.readObject());
        // ...
    }

}

Finally use that class instead in the List.


The Android Asynchronous Http Library supports automatic persistent cookie storage to SharedPreferences:

http://loopj.com/android-async-http/

Alternatively you can just extract and use the PersistentCookieStore.java and SerializableCookie.java classes if you still want to use DefaultHttpClient.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜