android学习笔记之利用AsyncHttpClient实现登录及cookie使用

首先感谢大神在自定义及使用AsyncHttpClent上的支持,详见 http://blog.csdn.net/jdsjlzx/article/details/44700965

本文主要记录一下我的android练习项目开发经过,主要提供一个思路,方便日后用到的时候参考。

android客户端登录并实现cookie保存:

能实现登录的方法非常多,最基础的HttpClient、ASyncTask、Volley框架等,但在登录之后,如果其他页面的请求需要基于登录时服务器返回的cookie,那上面的方法都不太好用,HttpClient代码量大,ASyncTask封装的也不好,Volley框架需要重写才可以实现对cookie的保存和调用。

基于此,通过学习了解到,AsyncHttpClient可以实现自动将cookie存至SharePreferences中以供调用,且其封装性好,代码十分简易。

但问题是,官方给出的对cookie的用法为以下两行代码:

PersistentCookieStore myCookieStore = new PersistentCookieStore(this);    
client.setCookieStore(myCookieStore); 

这在同一个类中确实可以存储并加载该cookie,但如果在其他类中再次请求网络时,则无法通过该方法设置cookie,这可让新手的我十分的头疼,幸好有本文第一行那篇博客的作者大神帮我,才得以实现。

实现方法:

单独封装类FinalAsyncHttpClent用于处理AsyncHttpClient,保证每次得到client对象时都已加载cookie

public class FinalAsyncHttpClient {

	private AsyncHttpClient client;

	/* 构造方法 */
	public FinalAsyncHttpClient() {
		client = new AsyncHttpClient();//实例化client
		client.setTimeout(5);//设置5秒超时
		// 获取cookie列表
		if (CookieUtils.getCookies() != null) {
			BasicCookieStore bcs = new BasicCookieStore();
			bcs.addCookies(CookieUtils.getCookies().toArray(
					new Cookie[CookieUtils.getCookies().size()]));//得到cookie列表
			client.setCookieStore(bcs);//给client加载cookie
		}
	}

	/* 得到client对象方法 */
	public AsyncHttpClient getAsyncHttpClient() {
		return this.client;
	}

}


在LoginActivity中通过下面方法实例化该client对象并保存cookie

<pre name="code" class="java">AsyncHttpClient client = new FinalAsyncHttpClient().getAsyncHttpClient();<pre name="code" class="java">CookieUtils.saveCookie(client,this);
 
 

登录成功后存储服务器返回的cookie

CookieUtils.setCookies(CookieUtils.getCookie(LoginActivity.this));


Cookie工具类CookieUtils,   (注:在LoginActivity中调用时,参数Context需传入LoginActivity.this)

public class CookieUtils {

	private static List<Cookie> cookies;

	/* 返回cookies列表 */
	public static List<Cookie> getCookies() {
		return cookies != null ? cookies : new ArrayList<Cookie>();
	}

	/* 设置cookies列表 */
	public static void setCookies(List<Cookie> cookies) {
		CookieUtils.cookies = cookies;
	}

	/* 存储cookie */
	public static void saveCookie(AsyncHttpClient client, Context context) {
		PersistentCookieStore cookieStore = new PersistentCookieStore(context);
		client.setCookieStore(cookieStore);
	}

	/* 得到cookie */
	public static List<Cookie> getCookie(Context context) {
		PersistentCookieStore cookieStore = new PersistentCookieStore(context);
		List<Cookie> cookies = cookieStore.getCookies();
		return cookies;
	}

	/* 清除cookie */
	public static void clearCookie(Context context) {
		PersistentCookieStore cookieStore = new PersistentCookieStore(context);
		cookieStore.clear();
	}
}

此时就实现了cookie的持久化,无论后续多少次请求,只要通过封装的client类来实例化请求对象,即可在实例化时加载保存的cookie。

最后再次感谢大神的指导,让我学到许多java编程的思想和方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值