Как сделать постоянные файлы cookie с помощью DefaultHttpClient в Android? - PullRequest
3 голосов
/ 18 мая 2010

Я использую

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

Теперь, так как Cookie не поддерживает сериализуемость, я не могу сериализовать этот Список.

РЕДАКТИРОВАТЬ: (указана моя цель, а не только проблема)

Моя цель - использовать DefaultHttpClient с постоянными файлами cookie.

Кто-нибудь с опытом, который мог бы привести меня на правильный путь? Возможно, есть еще одна лучшая практика, которую я не обнаружил ...

Ответы [ 2 ]

6 голосов
/ 18 мая 2010

Создайте свой собственный класс SerializableCookie, который implements Serializable, и просто скопируйте свойства Cookie во время его создания. Как то так:

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;
    }

    // ...

}

Убедитесь, что все свойства также являются сериализуемыми. Помимо примитивов, класс String, например, сам по себе уже implements Serializable, так что вам не нужно об этом беспокоиться.

В качестве альтернативы вы также можете обернуть / декорировать Cookie как свойство transient (чтобы оно не сериализовалось) и переопределить writeObject() и readObject() методы соответственно . Что-то вроде:

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());
        // ...
    }

}

Наконец, используйте этот класс вместо List.

2 голосов
/ 03 июня 2011

Android-библиотека асинхронного Http поддерживает автоматическое постоянное хранение файлов cookie для SharedPreferences:

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

В качестве альтернативы вы можете просто извлечь и использовать классы PersistentCookieStore.java и SerializableCookie.java, если вы по-прежнемухочу использовать DefaultHttpClient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...