Xutils3.0的cookie设置
来源:互联网 发布:手机加油软件代理 编辑:程序博客网 时间:2024/06/05 06:21
Xutils3.0的cookie设置
一.引言
最近学会分析了Android内存泄漏,兴致勃勃地把公司项目拿来做分析,一分析,吓一跳,到处都是内存泄漏!!仔细看了下,主要是自己用volley搭的网络请求框架有问题!!主要原因就是:网络请求的工具类是静态的,但是在Activity中向该工具类传递了一个Listener,这样导致了Activity泄漏。分析出了原因,要做修改感觉很困难,工作量很大。这时候就萌发了把自己写的框架替换掉的想法。在项目启动时候,考虑是否采用Xutils 3.0来做,当那时候,xUtils3.0 刚出来,网上看到很多bug,而且有个cookie问题,自己尝试了,也木有解决,所以当时就放弃了。这次又看了下,发现gitHub上对Cookie问题有专门的issue,所以就尝试来用。
二.曾经遇到的坑
以前用Xutils遇到的坑就是 :我们项目的后台对session失效会有一个返回报文,而当时版本的xutils自作主张的把这个给拦截了,这次使用,返现会在onSucc中返回这个报文,而且也有获取cookie的方式。于是,就在项目中把原有的Volley框架给替换了。
三.新的大坑
费了九牛二虎之力,总算把框架替换过来了,起初一切也如想象中一样,但接着遇到了一个更大的问题,当APP某个Activity崩溃之后,Cookie就丢失了,并且这个崩溃页面的网络请求并不是迅速出错(我们对Session失效的处理就是,返回登陆页面),而是在设置的超时时间之后,再在 onError方法中抛出异常:
java.net.ProtocolException: unexpected end of stream
这就恶心了,而且即使调到登陆页面,整个项目的体验也很不好。纠结呀!
四.解决方法
再Xutils3.0的Github上作者大神虽然提了解决方法,但是不知道为什么,他提的那个解决方式根本不行,原因就是 RequestInterceptListener 这个接口实现后,请求就报错!!这下纠结了,分析了很久,总算解决问题了:在登陆接口的onSucc的方法中,将cookie保存在SharedPreferences,然后自定义RequestParams。
五.代码
保存Cookie
NetParams requestParams = new NetParams( Constant.NET_Login_Goods,params,0); x.http().post(requestParams, new NetCallBack() { @Override public void onSuccess(org.json.JSONObject result) { try { L.d("NET_Login_Goods:"+result.toString()); DbCookieStore instance = DbCookieStore.INSTANCE; List<HttpCookie> cookies = instance.getCookies(); for (HttpCookie cookie:cookies){ String name = cookie.getName(); String value = cookie.getValue(); if("JSESSIONID".equals(name)){ myCookie =value; SharedPreferences.Editor editor = context.getSharedPreferences(Constant.SP_NAME, context.MODE_PRIVATE).edit(); editor.putString("Cookie", myCookie); editor.commit(); NetConstant.Cookie = myCookie; break; } }}}
自定义RequetParams
public class NetParams extends RequestParams { public NetParams(String url, JSONObject params, int timeOut){ super(Constant.EURL+url); setConnectTimeout(timeOut==0?30*1000:timeOut); if(params!=null) setBodyContent(params.toString()); )//登陆接口 和不需要CooKie的接口 if (!"/auth/getDate".equals(url)&&!"/api/auth".equals(url)) { SharedPreferences sharedPreferences = x.app().getSharedPreferences(Constant.SP_NAME, Context.MODE_PRIVATE);NetConstant.Cookie = sharedPreferences.getString("Cookie", ""); addHeader("Cookie", "JSESSIONID="+NetConstant.Cookie); setUseCookie(false); addHeader("Content-Type", "application/json;charset=UTF-8"); }else{ setUseCookie(true); } }}
这样就完美的解决了Xutils3.0的Cookie问题了。
- Xutils3.0的cookie设置
- Xutils3的cookie问题
- XUtils3.0的简单使用
- XUtils3.0
- xutils3.0
- xutils3.0 的使用及demo
- xUtils3.0的基本使用规则
- xutils3.0下载器的使用
- Xutils3.0框架的初始体验一
- Xutils3.0框架的初始体验二
- xUtils3.0中DbUtils的使用
- Xutils3.0简单的应用Dome
- Xutils3.0网络带缓存的封装
- XUtils3.0数据库的一些操作
- cookie的设置
- 关于cookie的设置
- 设置Cookie的生命周期
- cookie的设置
- poj 1321 简单搜索
- 电学发展史
- curl模拟post请求提交
- 万年历程序例题(农历阴历转换)
- Struts2配置拦截器的后缀名
- Xutils3.0的cookie设置
- ajax文件拖拽上传 预览
- HttpWebRequest用法
- Reverse Integer
- struts实现文件上传下载
- 我的简书博客
- 设计模式—状态模式
- Mac与Phy组成原理的简单分析
- 系统架构师-基础到企业应用架构-分层[上篇]