- 浏览: 20479 次
- 性别:
- 来自: 北京
最新评论
自带的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 4801、动画结束的时候不要执行remove操作 2、activ ... -
StringUtil
2013-09-10 17:03 999public abstract class Strin ... -
AES加解密
2013-09-10 17:00 877public class AESHelper { ... -
文件工具类
2013-09-10 16:58 978public class FileUtil { ... -
下载文件工具类
2013-09-10 16:55 1168public class DownloadUtils ... -
拍照旋转图片
2013-07-12 13:34 1214public class ImageUtil { ... -
判断当前显示的是否是桌面
2013-06-28 09:33 899boolean isHome = isHome(con ... -
LogUtil
2013-06-27 18:24 1178public class LogUtil { ... -
android显示和隐藏键盘
2013-06-27 18:20 767public class KeyboardUtil { ... -
实现类似微信的activity切换动画
2013-06-25 14:27 8911、首先定义4个动画文件。 slide_left_in.xm ... -
通过反射生成RequestParams
2013-06-25 14:06 808public static RequestParams get ... -
PopupWindow的使用
2013-06-25 14:02 633View view = View.inflate(this, ... -
android datepicker只显示年和日期
2013-06-25 13:55 1773public class YearMonthPicker ex ...
相关推荐
1. **commons-httpclient-3.1.jar**: 这是Apache HttpClient的一个旧版本,它提供了全面的HTTP客户端功能,包括支持HTTP/1.0和HTTP/1.1协议,支持各种HTTP方法如GET、POST等,以及处理重定向、Cookie管理和认证等...
HttpClient提供了一套完整的机制,可以设置请求头、处理Cookie、管理连接池,这在爬虫开发中非常有用。 在使用HttpClient时,有几个关键概念需要理解: 1. **HttpParams**: 这是用来设置HttpClient参数的对象,如...
使用HttpClient的优点在于它提供了丰富的功能,如连接管理、重试策略和身份验证机制,使得网络编程更加便捷。 在Android中集成HttpClient,首先需要在`build.gradle`文件中添加依赖(对于API 23及以上,由于...
AndroidHttpClient在原生的HttpClient基础上进行了优化,更适合Android环境的性能和内存管理。 ### AndroidHttpClient的创建与配置 创建AndroidHttpClient对象非常简单,只需调用`AndroidHttpClient.newInstance...
在Android系统中,HttpClient提供了一套完整的API,使得开发者能够方便地进行HTTP请求,发送POST、GET等方法,处理响应数据,以及实现Cookie管理、重定向等功能。 二、HttpClient在Android中的应用 1. 发起HTTP...
7. **Cookie管理**:能够处理服务器返回的cookies并将其保存,用于后续请求。 在Android中使用HttpClient时,需要注意以下几点: 1. **兼容性问题**:自Android 6.0(API级别23)开始,HttpClient被标记为废弃,...
然而,Android原生的HttpClient并不支持Multipart/form-data类型的请求,这在上传文件时是个问题。为了解决这个问题,我们可以引入第三方库如`httpclient`和`httpmime`,特别是`httpmine4j`相关的组件。 `...
在 Android 开发中,Cookie 的管理和同步对于维护用户会话状态至关重要。特别是在使用 HttpClient 发起网络请求时,保持客户端与服务器端 Session 的一致性是非常重要的。此外,在 WebView 中进行 Cookie 的同步也是...
《HttpClient 3.1在Android开发中的应用及详解》 HttpClient是Apache软件基金会的一个开源项目,提供了强大的HTTP客户端实现,广泛应用于Java平台的网络通信。本文主要围绕"HttpClient 3.1"版本,探讨其在Android...
它提供了丰富的API来处理各种HTTP操作,如GET、POST、PUT等,以及设置请求头、处理Cookie、管理连接池等功能。 在Android中使用HttpClient,首先需要添加相应的依赖。由于Android API 23及更高版本中移除了...
HttpClient是用于Android开发中进行网络通信的一个重要的库,它允许应用程序...通过以上的知识点介绍,可以对HttpClient有一个全面的了解,并在实际开发过程中有效地使用HttpClient进行Android应用与服务器之间的通信。
除了基本的HTTP请求,HttpClient还支持Cookie管理、身份验证、代理设置等高级功能。例如,使用`CookieStore`可以方便地管理会话cookie,而`AuthCache`则有助于处理服务器的身份验证需求。 在实际应用中,HttpClient...
6. **Cookie管理** 当涉及到维持会话时,我们需要处理Cookie。HttpClient提供CookieStore来存储服务器返回的Cookie: ```java CookieStore cookieStore = new BasicCookieStore(); httpClient.setCookieStore...
1. **全面的 HTTP 协议支持**:HttpClient 支持 HTTP/1.1 和部分 HTTP/2 规范,包括 GET、POST、PUT、DELETE 等多种请求方法,以及 Cookie、重定向、身份验证等高级特性。 2. **高性能与可扩展性**:HttpClient ...
HttpClient提供了对HTTPS的支持,能够处理Cookie,支持自定义HTTP头,以及重试和连接管理等功能,使得网络通信更加灵活和可控。 `webview`虽然在标签中提及,但在这个描述里似乎并未直接使用。通常,WebView是...
- **支持Cookie**:管理Cookie,维持用户会话。 - **自定义请求头**:方便地添加自定义请求头,以满足特定需求。 - **多格式支持**:可以处理JSON、XML等多种数据格式。 在实际开发中,开发者可以根据项目需求对...
- HttpClient支持Cookie管理,通过`CookieStore`和`BasicCookieStore`类可以保存和读取Cookie。 - 设置Cookie策略:`CookieSpecRegistry cookieSpecRegistry = new CookieSpecRegistry();` 和 `cookieSpecRegistry...
3. **支持HTTP协议**:除了基本的HTTP/1.1协议,HTTPCLIENT4还支持诸如PUT、DELETE、HEAD等HTTP方法,以及Cookie管理、代理设置、重定向处理等功能。 4. **流式处理**:正如描述中提到,HTTPCLIENT4允许开发者将...