Open Reallym404 opened 8 years ago
@biaomingzhong 在接口类中传入 上下位对象,然后再每个请求方法的返回中判断 token过期的错误码,相应操作后直接跳转到登陆页面?
大家都是这样解决的么? 有比较完美的解决方案么,
@yeming1001 按照你的疑惑,弹出一个登录的Dialog比较合适,这样不跳到新页面,不会打断当前用户的操作。
@atearsan 这样的话 是和我上面说的那种方式一样嘛,只是你说的是 弹个dialog。。其实也是 每个请求方法返回的地方 都要做判断咯?
@yeming1001 对于的你的请求response做公共处理,就是每个请求都经过这个公共处理,公共处理的地方判断到token过期就行,不需要每个请求
@AlphaHans 个人最近在看 retrofit 和 rxjava,了解的还比较浅显。项目中没有使用okhttp联网操作。。。。哎。
@AlphaHans 学习rxjava遇到问题 可以请教你不。这几天看了下,感觉有点没懂。怎么才能更容易上手呢。
@yeming1001 建议先看OkHttp 看得差不多再去看 RxJava最后看Retrofit。 一次性学太多的库,百害无益哦。 还是一个一个 好好看~
@yeming1001 RxJava推荐看例子来学。 网上的理论都是太虚了。实战理解最要紧。 推荐看一下rengwuxian大神的一个RxJavaDemo @rengwuxian
这个可以在刚拿到response数据的时候就直接拦截,比如上面同学说的okhttp拦截器就是这样做的; 也可以在自己封装的那一层进行处理: 比如,我项目中用的是volley,自己基于项目实际而在volley之上再简单封装了一下, 在发送一个请求获取到response传递到我自己的listener中时,判断是否为token/session过期,如果是,调用自己封装好的自动登陆的方法(需要带有回调),登陆成功后,再次发送原先的请求。
` private void postRequest(final String urlTail, final String tag, final Map map, final MyNetListener myListener){
String url = Url.HTTP_API_HEAD + Url.MID+ urlTail;
map.put(Constant.PostConfig.SESSION_ID, UIUtils.getSessionId());//每一个请求都传递sessionid
NormalPostRequest request = new NormalPostRequest(url, new Response.Listener
if (!TextUtils.isEmpty(msg) && msg.contains("需要登录")){
//判断是否session过期:没有定义好code,只能通过message来判断了,坑爹
ApiTools.autoLogin(new MyNetListener() {
@Override
public void onSuccess(Object response, String optStr) {
postNewRequest(urlTail,tag,map,myListener);
ToastUtils.showDebugToast("重新登陆后,重新发送请求中。。。");
}
});
}else {
ToastUtils.showToast(msg);
}
myListener.onError(msg);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
myListener.onError(error.toString());
}
}, map);
Logger.e("url:"+url);
StringUtils.printMap(map);
request.setTag(tag);
request.setRetryPolicy(policy);
requestQueue.add(request);
}`
还有一个方式 (如果允许一个账号多出登录) 保存用户的登录账号和密码, token过期的时候直接发送登录请求, 然后把新的token保存下来.
@hss01248 刷新token后如何重新发送上一次的网络请求呢 我这边接口鉴权失败并未走HTTP 401 而是 走的onsucces 通过json总的code区分的,导致我不知道该如何使用retry
这个问题我也比较好奇,暂时是判断接口返回固定的错误状态码,然后通过FLAG_ACTIVITY_CLEAR_TASK,进入登录页面