Android处理登录的session过期

本文介绍了一种使用OkHttp拦截器实现自动登录的方法,当检测到未登录状态时,自动发起登录请求并重新执行原始请求。适用于采用RxJava和OkHttp的项目。

1.笨办法:每次请求都检查一下时间最后一次登录成功的时间,如果过期重新登录;

2.RxJava:retryWhen,请求失败了尝试登陆了在请求;(但是每个请求的方法里面都要写一遍retryWhen麻烦。如果用了rxjava,可以考虑这种方法。(具体代码待补充)

3.使用okhttp3的拦截器(最佳)Interceptor。

具体实践:

由于我自己的项目使用了Rxjava和Okhttp,所以考虑方便,使用的第三种方法;

关键代码:

@Override
    public Response intercept(Chain chain) throws IOException {
        Request originalRequest = chain.request();
        Response originalResponse = chain.proceed(originalRequest);
        if (originalResponse.code() == 500 || originalResponse.body().string().equals("no login")) {//这里是由于我和后端司机没沟通好,有的端口未登录时请求的是500错误,有的是"no login",按自己实际情况来;
            originalResponse.body().close();
            Request loginRequest = getLoginRequest();
            Response loginResponse = chain.proceed(loginRequest);
            if (loginResponse.isSuccessful()) {
                loginResponse.body().close();
                return chain.proceed(originalRequest);
            }
        }

******

******

}

    private Request getLoginRequest() {
        return new Request.Builder()
                .url("http://113.106.90.51:xxxx/xxxx/xxxxxx")//
                .post(new FormBody.Builder()
                        .add(Constant.USERNAME, "xxx")
                        .add(Constant.PWD, "xx")
                        .build())
                .build();
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值