首先感谢大神在自定义及使用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.setTimeout(5);
-
- if (CookieUtils.getCookies() != null) {
- BasicCookieStore bcs = new BasicCookieStore();
- bcs.addCookies(CookieUtils.getCookies().toArray(
- new Cookie[CookieUtils.getCookies().size()]));
- client.setCookieStore(bcs);
- }
- }
-
-
- 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;
-
-
- public static List<Cookie> getCookies() {
- return cookies != null ? cookies : new ArrayList<Cookie>();
- }
-
-
- public static void setCookies(List<Cookie> cookies) {
- CookieUtils.cookies = cookies;
- }
-
-
- public static void saveCookie(AsyncHttpClient client, Context context) {
- PersistentCookieStore cookieStore = new PersistentCookieStore(context);
- client.setCookieStore(cookieStore);
- }
-
-
- public static List<Cookie> getCookie(Context context) {
- PersistentCookieStore cookieStore = new PersistentCookieStore(context);
- List<Cookie> cookies = cookieStore.getCookies();
- return cookies;
- }
-
-
- public static void clearCookie(Context context) {
- PersistentCookieStore cookieStore = new PersistentCookieStore(context);
- cookieStore.clear();
- }
- }
此时就实现了cookie的持久化,无论后续多少次请求,只要通过封装的client类来实例化请求对象,即可在实例化时加载保存的cookie。
最后再次感谢大神的指导,让我学到许多Java编程的思想和方法。