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

来源:互联网 发布:淘宝网冠军太极服 编辑:程序博客网 时间:2024/06/03 16:03

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

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

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

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

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

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

[java] view plain copy
  1. PersistentCookieStore myCookieStore = new PersistentCookieStore(this);      
  2. client.setCookieStore(myCookieStore);   

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

实现方法:

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

[java] view plain copy
  1. public class FinalAsyncHttpClient {  
  2.   
  3.     private AsyncHttpClient client;  
  4.   
  5.     /* 构造方法 */  
  6.     public FinalAsyncHttpClient() {  
  7.         client = new AsyncHttpClient();//实例化client  
  8.         client.setTimeout(5);//设置5秒超时  
  9.         // 获取cookie列表  
  10.         if (CookieUtils.getCookies() != null) {  
  11.             BasicCookieStore bcs = new BasicCookieStore();  
  12.             bcs.addCookies(CookieUtils.getCookies().toArray(  
  13.                     new Cookie[CookieUtils.getCookies().size()]));//得到cookie列表  
  14.             client.setCookieStore(bcs);//给client加载cookie  
  15.         }  
  16.     }  
  17.   
  18.     /* 得到client对象方法 */  
  19.     public AsyncHttpClient getAsyncHttpClient() {  
  20.         return this.client;  
  21.     }  
  22.   
  23. }  


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

[java] view plain copy
  1. <pre name="code" class="java">AsyncHttpClient client = new FinalAsyncHttpClient().getAsyncHttpClient();<pre name="code" class="java">CookieUtils.saveCookie(client,this);  

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

[java] view plain copy
  1. CookieUtils.setCookies(CookieUtils.getCookie(LoginActivity.this));  


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

[java] view plain copy
  1. public class CookieUtils {  
  2.   
  3.     private static List<Cookie> cookies;  
  4.   
  5.     /* 返回cookies列表 */  
  6.     public static List<Cookie> getCookies() {  
  7.         return cookies != null ? cookies : new ArrayList<Cookie>();  
  8.     }  
  9.   
  10.     /* 设置cookies列表 */  
  11.     public static void setCookies(List<Cookie> cookies) {  
  12.         CookieUtils.cookies = cookies;  
  13.     }  
  14.   
  15.     /* 存储cookie */  
  16.     public static void saveCookie(AsyncHttpClient client, Context context) {  
  17.         PersistentCookieStore cookieStore = new PersistentCookieStore(context);  
  18.         client.setCookieStore(cookieStore);  
  19.     }  
  20.   
  21.     /* 得到cookie */  
  22.     public static List<Cookie> getCookie(Context context) {  
  23.         PersistentCookieStore cookieStore = new PersistentCookieStore(context);  
  24.         List<Cookie> cookies = cookieStore.getCookies();  
  25.         return cookies;  
  26.     }  
  27.   
  28.     /* 清除cookie */  
  29.     public static void clearCookie(Context context) {  
  30.         PersistentCookieStore cookieStore = new PersistentCookieStore(context);  
  31.         cookieStore.clear();  
  32.     }  
  33. }  

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

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

原创粉丝点击