小编典典

我花了几个小时,但我自己设法建立了一个自定义cookie存储。

您必须通过执行以下操作来附加它:

public class application extends Application {

@Override

public void onCreate() {

super.onCreate();

CookieManager cmrCookieMan = new CookieManager(new MyCookieStore(this.objContext), CookiePolicy.ACCEPT_ALL);

CookieHandler.setDefault(cmrCookieMan);

}

}

这是实际的存储空间:

/*

* This is a custom cookie storage for the application. This

* will store all the cookies to the shared preferences so that it persists

* across application restarts.

*/

class MyCookieStore implements CookieStore {

/*

* The memory storage of the cookies

*/

private Map> mapCookies = new HashMap>();

/*

* The instance of the shared preferences

*/

private final SharedPreferences spePreferences;

/*

* @see java.net.CookieStore#add(java.net.URI, java.net.HttpCookie)

*/

public void add(URI uri, HttpCookie cookie) {

System.out.println("add");

System.out.println(cookie.toString());

List cookies = mapCookies.get(uri);

if (cookies == null) {

cookies = new ArrayList();

mapCookies.put(uri, cookies);

}

cookies.add(cookie);

Editor ediWriter = spePreferences.edit();

HashSet setCookies = new HashSet();

setCookies.add(cookie.toString());

ediWriter.putStringSet(uri.toString(), spePreferences.getStringSet(uri.toString(), setCookies));

ediWriter.commit();

}

/*

* Constructor

*

* @param ctxContext the context of the Activity

*/

@SuppressWarnings("unchecked")

public MyCookieStore(Context ctxContext) {

spePreferences = ctxContext.getSharedPreferences("CookiePrefsFile", 0);

Map prefsMap = spePreferences.getAll();

for(Map.Entry entry : prefsMap.entrySet()) {

for (String strCookie : (HashSet) entry.getValue()) {

if (!mapCookies.containsKey(entry.getKey())) {

List lstCookies = new ArrayList();

lstCookies.addAll(HttpCookie.parse(strCookie));

try {

mapCookies.put(new URI(entry.getKey()), lstCookies);

} catch (URISyntaxException e) {

e.printStackTrace();

}

} else {

List lstCookies = mapCookies.get(entry.getKey());

lstCookies.addAll(HttpCookie.parse(strCookie));

try {

mapCookies.put(new URI(entry.getKey()), lstCookies);

} catch (URISyntaxException e) {

e.printStackTrace();

}

}

System.out.println(entry.getKey() + ": " + strCookie);

}

}

}

/*

* @see java.net.CookieStore#get(java.net.URI)

*/

public List get(URI uri) {

List lstCookies = mapCookies.get(uri);

if (lstCookies == null)

mapCookies.put(uri, new ArrayList());

return mapCookies.get(uri);

}

/*

* @see java.net.CookieStore#removeAll()

*/

public boolean removeAll() {

mapCookies.clear();

return true;

}

/*

* @see java.net.CookieStore#getCookies()

*/

public List getCookies() {

Collection> values = mapCookies.values();

List result = new ArrayList();

for (List value : values) {

result.addAll(value);

}

return result;

}

/*

* @see java.net.CookieStore#getURIs()

*/

public List getURIs() {

Set keys = mapCookies.keySet();

return new ArrayList(keys);

}

/*

* @see java.net.CookieStore#remove(java.net.URI, java.net.HttpCookie)

*/

public boolean remove(URI uri, HttpCookie cookie) {

List lstCookies = mapCookies.get(uri);

if (lstCookies == null)

return false;

return lstCookies.remove(cookie);

}

}

2020-09-16

java urlconnection cookie_使用HTTPUrlConnection时如何保留cookie?相关推荐

  1. java 登录牵手_Java: HttpURLConnection 模拟登录方法 (带cookie 的Post/Get)_20160908_七侠镇莫尛貝...

    // http://blog.csdn.net/woxueliuyun/article/details/43267365 package tool class MyHttpUrlConn { publ ...

  2. Java网络连接之HttpURLConnection、HttpsURLConnection

    工具类包含两个方法: http请求.https请求 直接看代码: package com.jtools;import java.io.BufferedReader; import java.io.In ...

  3. 【java程序员必备上班时长计算器】

    java代码,根据程序员每天打卡时间,获取上班总时长,上班天数,平均上班时长,超出要求时间,为了方便大家把握时间节奏,合理规划下班时间: 一:效果图片 二:工具类 package com.compan ...

  4. java日期时间库-常用案例-不保留全分享

    java日期时间库-常用案例-不保留全分享 除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使 ...

  5. java.lang.IllegalStateException: 启动子级时出错

    java.lang.IllegalStateException: 启动子级时出错 at org.apache.catalina.core.ContainerBase.addChildInternal( ...

  6. 复制文件时怎么保留权限

    复制文件时怎么保留权限 浏览次数: 19 次 字体:[增加 减小] 类型:转载 例如你现在已经登陆到新的域文件服务器,设置需要共享的文件夹E:\newshare(这个必须要先设置再复制,否则后面会出问 ...

  7. Java中重写equals()方法时注意点

    Java中重写equals()方法时注意点 一直说,重写一个对象的equals()方法时我们必须重写HashCode()方法,但是如果我们不重写呢?会有什么影响呢? 首先看一下,什么情况下我们需要重写 ...

  8. 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错

    解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错 问题描述:   笔者将一个在 Tomcat ...

  9. java当数值超过byte时_java试题及答案

    java试题及答案 java是面向对象的语言,那么java认证有哪些常见试题呢?下面跟yjbys小编一起来看看最新java认证考试试题及答案,仅供大家参考! 1.一个".java" ...

  10. Java如何控制用户输入的长度,用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!!...

    用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!! | create a new class FixLengthDocument extends Pla ...

最新文章

  1. 与技术无关的书单--你可以笑着说有些是“精神鸦片”
  2. Ubuntu14.04 64位机上安装OpenCV2.4.13(CUDA8.0)版操作步骤
  3. bzoj4385 POJ2015 Wilcze doły
  4. Oracle中,如何查看FRA(Flashback Recovery Area)的利用率
  5. 2017 年 VR 将走的 3 个方向 你更认可哪一个?
  6. 跨链Cosmos(10) IBC接口
  7. qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形
  8. 在sqlplus中实现命令的上翻下翻功能
  9. liunx 下 php 的安装
  10. php正则多个字段,正则表达式,grep_linux shell中如何实现对多个关键字段的排除?,正则表达式,grep,linux,shell - phpStudy...
  11. Java程序员面试常见问题
  12. UE编辑器去掉*.bak备份文件
  13. 读取任意编码的文件(转)
  14. 互联网日报 | 7月14日 星期三 | 京东宣布涨薪两个月;腾讯收购搜狗股权获无条件批准;教育部辟谣取消教师寒暑假...
  15. Jasperreport_6.18的吐血记录三之简易交叉表 + 页面预览和导出
  16. 生产排程系统_生产计划排程APS系统中排产算法的探讨
  17. 不用工具,如何快速计算文件的MD5?
  18. 谷歌浏览器 翻译失败解决办法
  19. Unicode转换为UTF-8过程Demo
  20. JSP+Servlet实现留言板(简陋)

热门文章

  1. 文件比较 增量 更新 系统发布 增量更新
  2. Google gae部署php简单说明
  3. u-boot环境的擦除,默认设置,批写入
  4. SAP-PP后台配置(第二部分)
  5. Producer-Consumer question : OO 生产者-消费者:面向对象
  6. 获取字符串中的汉字拼音首字母
  7. 前端最佳实践(一)——DOM操作
  8. SparkSQL错误:Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider...
  9. linux中/etc/rc.local脚本的作用
  10. POJ 2991 Crane