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

AsyncHttpClient client = new FinalAsyncHttpClient().getAsyncHttpClient();
CookieUtils.saveCookie(client,this);
 
  
 
  
登录成功后存储服务器返回的cookie

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


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

public class CookieUtils {

	private static List cookies;

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

	/* 设置cookies列表 */
	public static void setCookies(List 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 getCookie(Context context) {
		PersistentCookieStore cookieStore = new PersistentCookieStore(context);
		List cookies = cookieStore.getCookies();
		return cookies;
	}

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

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

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

你可能感兴趣的:(android入门学习)