首先感谢大神在自定义及使用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;
}
}
<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));
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编程的思想和方法。