当前位置: 首页 > 面试题库 >

如何在Android中使用DefaultHttpClient制作持久性Cookie?

奚曦哲
2023-03-14
问题内容

我正在使用

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

现在,由于Cookie无法实现可序列化,因此我无法序列化该List。

编辑:(指定了我的目标,不仅是问题)

我的目标是将DefaultHttpClient与持久性cookie一起使用。

有经验的人可以带领我走上正确的道路吗?我可能还没有发现另一种最佳实践…


问题答案:

创建您自己的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



 类似资料:
  • 我正在使用android的房间持久性库,如果有人能帮助我使用外键,如何通过使用外键获取数据,我将不胜感激。

  • Cadence中QPS极限有两种类型的错误 和 最好的解决方法是什么?

  • 问题内容: 我想知道如何禁用Redis的持久性。这里提到了这样做的可能性:http : //redis.io/topics/persistence。我的意思是和那里描述的完全一样。任何帮助将不胜感激! 问题答案: 要禁用Redis中的 所有 数据持久性,请执行以下操作: 通过将配置指令设置为(默认值)来禁用AOF 通过禁用(注释掉)所有配置指令来禁用RDB快照(默认情况下定义了3个) 这些配置指令

  • 我在想如何禁用Redis的耐药性。这里提到了这样做的可能性:http://redis.io/topics/persistence。我的意思和那里描述的完全一样。任何帮助都将非常感谢!

  • 问题内容: 如何使表user_roles定义两列(userID,roleID)作为组合主键。应该很容易,只是不记得/找不到。 在实体中: 在实体中: 谢谢。 ** 更多信息 因此,有一个第三表即花费(由上述自动生成)从实体和从实体。现在,我需要将生成的表()中的这两列用作复合主键。 问题答案: 您已经在如何按照自己的要求做一些很好的答案。 作为参考,让我仅提及在Hibernate中执行此操作的推荐

  • 我试图通过新的android room库更新我的数据库,但它不起作用。这就是我的方法 主要活动。JAVA CarViewModel。JAVA 卡ao.java 我做了调试,新数据出现并调用viewModel。updateItems(list)方法。提前谢谢!