- 浏览: 19747 次
- 性别:
- 来自: 北京
最新评论
自带的CookieStore只能在内存里边管理cookie,但是有的时候需要把cookie保存到文件里边。
为了长久保存cookie,自定义了BasicCookieStore,当添加cookie的时候,都保存到数据库,初始化的时候再从数据里边恢复cookie。
1、自定义的CookieStore
2、数据库
3、把CookieStore设置到httpclient
为了长久保存cookie,自定义了BasicCookieStore,当添加cookie的时候,都保存到数据库,初始化的时候再从数据里边恢复cookie。
1、自定义的CookieStore
public class CustomCookieStore extends BasicCookieStore { public CustomCookieStore() { super(); try { List<Cookie> cookies = CookieDBManager.getInstance().getAllCookies(); CookieDBManager.getInstance().clear(); Cookie[] cookiesArr = new Cookie[cookies.size()]; for (int i = cookies.size() - 1; i >= 0; i--) { cookiesArr[i] = cookies.get(i); } addCookies(cookiesArr); } catch (Exception e) { e.printStackTrace(); } } @Override public synchronized void addCookie(Cookie cookie) { super.addCookie(cookie); try { CookieDBManager.getInstance().saveCookie(cookie); } catch (Exception e) { e.printStackTrace(); } } @Override public synchronized void addCookies(Cookie[] cookies) { super.addCookies(cookies); try { CookieDBManager.getInstance().saveCookies(cookies); } catch (Exception e) { e.printStackTrace(); } } @Override public synchronized void clear() { super.clear(); try { CookieDBManager.getInstance().clear(); } catch (Exception e) { e.printStackTrace(); } } @Override public synchronized boolean clearExpired(Date date) { try { CookieDBManager.getInstance().clearExpired(); } catch (Exception e) { e.printStackTrace(); } return super.clearExpired(date); } @Override public synchronized List<Cookie> getCookies() { return super.getCookies(); } @Override public String toString() { return super.toString(); } }
2、数据库
public class CookieDBManager { private final String DB_NAME = "cookie.db"; private final String TABLE_NAME = "cookie"; private DBHelper dbHelper; private SQLiteDatabase db; private static CookieDBManager instance; public static CookieDBManager getInstance() { if (instance == null) { instance = new CookieDBManager(); } return instance; } public CookieDBManager() { dbHelper = new DBHelper(App.getCurrentApp(), DB_NAME, null, 1); db = dbHelper.getWritableDatabase(); } private class DBHelper extends SQLiteOpenHelper { private String SQL_CAREATE_DB = "CREATE TABLE IF NOT EXISTS "// + TABLE_NAME + " (" + // Column.AUTO_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + // Column.VALUE + " TEXT," + // Column.NAME + " TEXT," + // Column.COMMENT + " TEXT," + // Column.DOMAIN + " TEXT," + // Column.EXPIRY_DATE + " INTEGER," + // Column.PATH + " TEXT," + // Column.SECURE + " INTEGER," + // Column.VERSION + " TEXT)";// public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CAREATE_DB); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); db.execSQL(SQL_CAREATE_DB); } } public List<Cookie> getAllCookies() { List<Cookie> cookies = new ArrayList<Cookie>(); Cursor cursor = db .query(TABLE_NAME, null, null, null, null, null, null); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(Column.NAME)); String value = cursor .getString(cursor.getColumnIndex(Column.VALUE)); BasicClientCookie cookie = new BasicClientCookie(name, value); cookie.setComment(cursor.getString(cursor .getColumnIndex(Column.COMMENT))); cookie.setDomain(cursor.getString(cursor .getColumnIndex(Column.DOMAIN))); long expireTime = cursor.getLong(cursor .getColumnIndex(Column.EXPIRY_DATE)); if (expireTime != 0) { cookie.setExpiryDate(new Date(expireTime)); } cookie.setPath(cursor.getString(cursor.getColumnIndex(Column.PATH))); cookie.setSecure(cursor.getInt(cursor.getColumnIndex(Column.SECURE)) == 1); cookie.setVersion(cursor.getInt(cursor .getColumnIndex(Column.VERSION))); cookies.add(cookie); } cursor.close(); return cookies; } public void saveCookie(Cookie cookie) { LogUtil.d("saveCookie:" + cookie); if (cookie == null) { return; } db.delete(TABLE_NAME, Column.NAME + " = ? ", new String[] { cookie.getName() }); ContentValues values = new ContentValues(); values.put(Column.VALUE, cookie.getValue()); values.put(Column.NAME, cookie.getName()); values.put(Column.COMMENT, cookie.getComment()); values.put(Column.DOMAIN, cookie.getDomain()); if (cookie.getExpiryDate() != null) { values.put(Column.EXPIRY_DATE, cookie.getExpiryDate().getTime()); } values.put(Column.PATH, cookie.getPath()); values.put(Column.SECURE, cookie.isSecure() ? 1 : 0); values.put(Column.VERSION, cookie.getVersion()); db.insert(TABLE_NAME, null, values); } public void saveCookies(Cookie[] cookies) { LogUtil.d("saveCookies:" + cookies); if (cookies == null) { return; } db.beginTransaction(); for (Cookie cookie : cookies) { saveCookie(cookie); } db.setTransactionSuccessful(); db.endTransaction(); } public void clear() { db.delete(TABLE_NAME, null, null); } public void clearExpired() { long time = System.currentTimeMillis(); db.delete(TABLE_NAME, "EXPIRY_DATE < ? AND EXPIRY_DATE != 0", new String[] { String.valueOf(time) }); } private static class Column { public static final String AUTO_ID = "AUTO_ID"; public static final String VALUE = "VALUE"; public static final String NAME = "NAME"; public static final String COMMENT = "COMMENT"; public static final String DOMAIN = "DOMAIN"; public static final String EXPIRY_DATE = "EXPIRY_DATE"; public static final String PATH = "PATH"; public static final String SECURE = "SECURE"; public static final String VERSION = "VERSION"; } }
3、把CookieStore设置到httpclient
httpClient.setCookieStore(new CustomCookieStore());
发表评论
-
开发中的小坑
2015-08-25 18:45 4571、动画结束的时候不要执行remove操作 2、activ ... -
StringUtil
2013-09-10 17:03 963public abstract class Strin ... -
AES加解密
2013-09-10 17:00 823public class AESHelper { ... -
文件工具类
2013-09-10 16:58 939public class FileUtil { ... -
下载文件工具类
2013-09-10 16:55 1125public class DownloadUtils ... -
拍照旋转图片
2013-07-12 13:34 1177public class ImageUtil { ... -
判断当前显示的是否是桌面
2013-06-28 09:33 856boolean isHome = isHome(con ... -
LogUtil
2013-06-27 18:24 1142public class LogUtil { ... -
android显示和隐藏键盘
2013-06-27 18:20 715public class KeyboardUtil { ... -
实现类似微信的activity切换动画
2013-06-25 14:27 8551、首先定义4个动画文件。 slide_left_in.xm ... -
通过反射生成RequestParams
2013-06-25 14:06 766public static RequestParams get ... -
PopupWindow的使用
2013-06-25 14:02 586View view = View.inflate(this, ... -
android datepicker只显示年和日期
2013-06-25 13:55 1738public class YearMonthPicker ex ...
相关推荐
今天想把一个用使用了HttpClient的自动签到小程序移植到Android上,还好Android的SDK自带了HttpClient的包.当然也可以继续使用DefaultHttpClient,但用为Android定制的AndroidHttpClient自然更好
Android中使用AsyncHttpClient读写Cookie实例,方便快捷!
httpClient请求和服务器session保持同步,webView对cookie的管理
该资源为安卓使用httpClient实现网络请求并通过cookie维持对话,代码中大家换上自己的接口,就可以运行。
做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有...
httpclient相当强大,读写cookie非常容易: CookieStore cookies=((AbstractHttpClient)client).getCookieStore();//读cookie ((AbstractHttpClient) client).setCookieStore(cookies);//写cookie 另外的一个问题...
主要介绍了Android持久化保存cookie的方法,在解析网页信息的时候,需要登录后才能访问,所以使用httpclient模拟登录,然后把cookie保存下来,以供下一次访问使用,感兴趣的小伙伴们可以参考一下
纯JSP演示Cookie自动登录(完整工程。主要实现勾选自动登录后, 哪怕服务器重启后session丢失,靠客户端COOKIE仍然正常登录并刷新COOKIE。...现为WEB,可改造为提供android 和ios下的httpclient保持长久登录状态的方式。
An asynchronous, callback-based Http client for Android built on top of Apache's HttpClient libraries. Changelog See what is new in version 1.4.9 released on 19th September 2015 ...
这是一个Android Studio工程,包含登录和注册两个Activity,分别使用PostService类指定连接的Java Web服务器的Servlet,HttpClient类指定连接的服务器地址。详情可参考我的博客文章...
ConnectionHandler是一个开放源代码Android库项目,用于处理与RESTful服务的通信。 它基于Apache HttpClient。 ConnectionHandler的优点: 支持同步和异步调用。 支持许多配置选项,例如连接超时,使用cookie等。...
AsyncHttpHelp是一个android平台下基于httpclient开发的HTTP网络请求工具。 优点 功能齐全,提供常用的http网络访问接口。 轻量级,无任何第三方库依赖,库大小为90K左右。 定制化,自定义json解析库,支持请求...
public HttpClient getHttpClient() public HttpContext getHttpContext() public void configCookieStore(CookieStore cookieStore) //配置cookie public void configUserAgent(String userAgent) public ...
支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的性能. 图片绑定支持gif, webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转...
排球曲奇使用截击保存 cookie 的示例1 - 将volley.jar从 libs 路径导入到您的项目2 - 在 build.gradle 依赖项中导入compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.3' 3...
支持标准的Cookie策略, 区分domain, path... 事件注解去除不常用的功能, 提高性能. 数据库api简化提高性能, 达到和greenDao一致的性能. 图片绑定支持gif, webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转...
支持标准的Cookie策略, 区分domain, path; 事件注解去除不常用的功能, 提高性能; 数据库api简化提高性能, 达到和greenDao一致的性能; 图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持...