Android处理登录的session过期

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();
    }

你可能感兴趣的:(备忘笔记整理)