修复refreshToken过期重试问题

This commit is contained in:
kehaoyuan
2017-11-09 11:47:13 +08:00
parent 1d544ff558
commit ec2d14bffe
4 changed files with 50 additions and 19 deletions

View File

@ -3,6 +3,7 @@ package com.gh.common.util;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.text.TextUtils;
@ -35,6 +36,7 @@ import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.HttpException;
import rx.Observable;
import rx.Scheduler;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
@ -200,7 +202,7 @@ public class LoginUtils {
syncUserData(context, syncDeviceID, listener, loginTag);
sp.edit().putString("syncDeviceID", null).apply(); // 清空
} else {
getUserData(context, listener, loginTag);
getUserData(context, false, listener, loginTag);
}
}
@ -297,15 +299,15 @@ public class LoginUtils {
if (loginToken != null && loginToken.getAccessToken() != null) {
LoginResponseEntity.AccessToken accessToken = loginToken.getAccessToken();
Long accessExpire = accessToken.getExpire();
if (accessExpire != null && accessExpire > Utils.getTime(context)) {
getUserData(context, listener, null);
if (false && accessExpire != null && accessExpire > Utils.getTime(context)) {
getUserData(context, false, listener, null);
} else {
LoginResponseEntity.RefreshToken refreshToken = loginToken.getRefreshToken();
Long refreshExpire = refreshToken.getExpire();
if (refreshExpire != null && refreshExpire > Utils.getTime(context)) {
Map<String, String> params = new HashMap<>();
params.put("refresh_token", refreshToken.getValue());
RefreshTokenManager.getInstance().refreshToken(context, new JSONObject(params), listener);
RefreshTokenManager.getInstance().refreshToken(context, false, new JSONObject(params), listener);
} else {
// 重新登录
cleanUserData(context);
@ -332,6 +334,12 @@ public class LoginUtils {
}
}
@Override
public void onError(Throwable e) {
super.onError(e);
Utils.log("=====eeee::" + e.toString());
}
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
@ -349,14 +357,21 @@ public class LoginUtils {
}
// 获取用户信息
public static void getUserData(final Context context, final onLoginCallBackListener listener, final LoginTag loginTag) {
public static void getUserData(final Context context, boolean isRunMainThread, final onLoginCallBackListener listener, final LoginTag loginTag) {
RetrofitManager.getInstance(context)
.getApi()
.getUserInfo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userInfoResponse(context, loginTag, listener));
Observable<UserInfoEntity> observable;
if (isRunMainThread) {
observable = RetrofitManager.getInstance(context)
.getApi()
.getUserInfo();
} else {
observable = RetrofitManager.getInstance(context)
.getApi()
.getUserInfo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
observable.subscribe(userInfoResponse(context, loginTag, listener));
}
// 获取本地缓存用户信息

View File

@ -1,6 +1,7 @@
package com.gh.gamecenter.manager;
import android.content.Context;
import android.os.Looper;
import com.gh.common.constant.Constants;
import com.gh.common.util.DeviceUtils;
@ -19,6 +20,8 @@ import org.json.JSONObject;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import retrofit2.HttpException;
import rx.Observable;
import rx.Scheduler;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
@ -46,7 +49,14 @@ public class RefreshTokenManager {
return mInstance;
}
public void refreshToken(final Context context, JSONObject content, final LoginUtils.onLoginCallBackListener listener) {
/**
*
* @param context
* @param isRunMainThread 是否同步执行
* @param content
* @param listener
*/
public void refreshToken(final Context context, final boolean isRunMainThread, JSONObject content, final LoginUtils.onLoginCallBackListener listener) {
if (isRefreshing) {
listener.onLoginFailure();
return;
@ -62,9 +72,15 @@ public class RefreshTokenManager {
e.printStackTrace();
}
RetrofitManager.getInstance(context).getUsersea().refreshToken(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
Observable<LoginResponseEntity> observable;
if (isRunMainThread) {
observable = RetrofitManager.getInstance(context).getUsersea().refreshToken(body);
} else {
observable = RetrofitManager.getInstance(context).getUsersea().refreshToken(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
observable
.subscribe(new Response<LoginResponseEntity>() {
@Override
public void onResponse(LoginResponseEntity response) {
@ -76,7 +92,7 @@ public class RefreshTokenManager {
}
saveLoginToken(context, response);
LoginUtils.getUserData(context, listener, LoginUtils.LoginTag.refresh);
LoginUtils.getUserData(context, isRunMainThread, listener, LoginUtils.LoginTag.refresh);
isRefreshing = false;
}

View File

@ -68,7 +68,7 @@ class OkHttpRetryInterceptor internal constructor(context: Context) : Intercepto
if (value == null) break
params.put("refresh_token", value)
RefreshTokenManager.getInstance().refreshToken(mContext, JSONObject(params), object : LoginUtils.onLoginCallBackListener {
RefreshTokenManager.getInstance().refreshToken(mContext, true, JSONObject(params), object : LoginUtils.onLoginCallBackListener {
override fun onLogin(entity: UserInfoEntity, loginTag: LoginUtils.LoginTag) {
val userLoginToken = LoginUtils.getLoginToken(mContext)
val newBuilder = request.newBuilder()