From cf4ca685f659dc6edb8e09887a1a891cbae907a6 Mon Sep 17 00:00:00 2001 From: haomingming Date: Wed, 4 Nov 2026 10:38:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E6=8B=A6=E6=88=AA=E7=A0=813800=20=E8=B7=B3=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shangyu/gdxzExpert/base/BaseActivity.java | 6 +- .../shangyu/gdxzExpert/base/BaseFragment.java | 6 +- .../shangyu/gdxzExpert/http/HttpHelper.java | 40 ++++++++++++- .../gdxzExpert/utils/HttpMD5SendInfoUtil.java | 20 +++++-- .../cn/shangyu/gdxzExpert/utils/UIUtils.java | 58 +++++++++++++++++++ 5 files changed, 121 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java index bc69482..08d8665 100644 --- a/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java +++ b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java @@ -521,7 +521,11 @@ public abstract class BaseActivity extends AppCompatActivity implements Handler mHandler = new Handler() { public void handleMessage(Message msg) { if (msg != null) { - String resultData = (String) msg.obj; + String resultData = (String) msg.obj; + if (UIUtils.interceptCode38000(ct, resultData)) { + closeProgressDialog(); + return; + } OnCallBackFromNet callBack = (OnCallBackFromNet) msg.getData().getSerializable("callback"); int i = msg.what; if (callBack == null) { diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java index 173d0aa..14dd4be 100644 --- a/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java +++ b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java @@ -242,7 +242,11 @@ public abstract class BaseFragment extends Fragment { Handler mHandler = new Handler() { public void handleMessage(Message msg) { if (msg != null) { - String resultData = (String) msg.obj; + String resultData = (String) msg.obj; + if (UIUtils.interceptCode38000(getActivity(), resultData)) { + closeProgressDialog(); + return; + } OnCallBackFromNet callBack = (OnCallBackFromNet) msg.getData().getSerializable("callback"); int i = msg.what; if (callBack == null) { diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java index 0473e3d..a9f1aa2 100644 --- a/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java +++ b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java @@ -28,7 +28,10 @@ import java.io.UnsupportedEncodingException; import java.util.List; import cn.shangyu.gdxzExpert.utils.IoUtils; -import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; public class HttpHelper { // public static final String URL = "http://10.0.2.2:8080/"; @@ -117,7 +120,37 @@ public class HttpHelper { // else { // http.send(method, url, params, callback); // } - HttpHandler cancleHttp = http.send(method, url, params,callback); + final RequestCallBack finalCallback = callback; + RequestCallBack wrappedCallback = finalCallback == null ? null : new RequestCallBack() { + @Override + public void onStart() { + finalCallback.onStart(); + } + + @Override + public void onLoading(long total, long current, boolean isUploading) { + finalCallback.onLoading(total, current, isUploading); + } + + @Override + public void onCancelled() { + finalCallback.onCancelled(); + } + + @Override + public void onSuccess(ResponseInfo responseInfo) { + if (responseInfo != null && UIUtils.interceptCode38000(UIUtils.getContext(), responseInfo.result)) { + return; + } + finalCallback.onSuccess(responseInfo); + } + + @Override + public void onFailure(HttpException error, String msg) { + finalCallback.onFailure(error, msg); + } + }; + HttpHandler cancleHttp = http.send(method, url, params, wrappedCallback); // if(cancleHttp!=null){ // cancleHttp.cancel();//取消网络请求 // } @@ -277,7 +310,8 @@ public class HttpHelper { out.write(buffer, 0, len); } byte[] data = out.toByteArray(); - mStr = new String(data, "utf-8"); + mStr = new String(data, "utf-8"); + UIUtils.interceptCode38000(UIUtils.getContext(), mStr); } catch (Exception e) { e.printStackTrace(); } finally { diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java index 4a3293a..0d34e29 100644 --- a/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java @@ -81,7 +81,10 @@ public class HttpMD5SendInfoUtil { if (conn.getResponseCode() == 200) { InputStream inStream = conn.getInputStream(); String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); - String string = new String(result); + String string = new String(result); + if (UIUtils.interceptCode38000(getContext(), string)) { + return; + } JSONObject jsonObject = new JSONObject(string); String optString = jsonObject.optString("code"); String message = jsonObject.optString("message"); @@ -170,7 +173,10 @@ public class HttpMD5SendInfoUtil { if (ssss == 200) { InputStream inStream = conn.getInputStream(); String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); - String string = new String(result); + String string = new String(result); + if (UIUtils.interceptCode38000(getContext(), string)) { + return; + } LogUtil.i("result = "+result); JSONObject jsonObject = new JSONObject(string); String optString = jsonObject.optString("code"); @@ -260,7 +266,10 @@ public class HttpMD5SendInfoUtil { if (ssss == 200) { InputStream inStream = conn.getInputStream(); String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); - String string = new String(result); + String string = new String(result); + if (UIUtils.interceptCode38000(getContext(), string)) { + return; + } LogUtil.i("result = "+result); JSONObject jsonObject = new JSONObject(string); String optString = jsonObject.optString("code"); @@ -345,7 +354,10 @@ public class HttpMD5SendInfoUtil { if (ssss == 200) { InputStream inStream = conn.getInputStream(); String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); - String string = new String(result); + String string = new String(result); + if (UIUtils.interceptCode38000(getContext(), string)) { + return; + } LogUtil.i("result = "+result); JSONObject jsonObject = new JSONObject(string); String optString = jsonObject.optString("code"); diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java index 5f05649..017c6c5 100644 --- a/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java @@ -375,6 +375,64 @@ public class UIUtils { */ private static long lastJumpLoginTime = 0L; + /** + * 全局拦截网络请求返回码 code == 38000,清理失效登录态并跳转登录页 + * + * @param context 上下文 + * @param resultJson 接口返回的 JSON 字符串 + * @return true 表示命中 code == 38000 并已拦截跳转;false 表示正常放行 + */ + public static boolean interceptCode38000(final Context context, String resultJson) { + if (StringUtil.isEmpty(resultJson) || !resultJson.contains("38000")) { + return false; + } + try { + org.json.JSONObject jsonObject = new org.json.JSONObject(resultJson); + String code = jsonObject.optString("code"); + if (!"38000".equals(code) && jsonObject.optInt("code", -1) != 38000) { + return false; + } + runInMainThread(new Runnable() { + @Override + public void run() { + Context appCtx = getContext(); + if (appCtx != null && isAccountLogined()) { + SharePrefUtil.saveBoolean(appCtx, Constant.IS_LOGIN, false); + SharePrefUtil.saveString(appCtx, Constant.uuid, ""); + SharePrefUtil.saveString(appCtx, Constant.USERID, ""); + SharePrefUtil.saveString(appCtx, "access_token", ""); + SharePrefUtil.saveString(appCtx, "refresh_token", ""); + } + long now = System.currentTimeMillis(); + if (now - lastJumpLoginTime < 1500) { + return; + } + Activity topActivity = cn.shangyu.gdxzExpert.base.AppManager.getAppManager().currentActivity(); + if (topActivity instanceof LoginNewActivity + || topActivity instanceof cn.shangyu.gdxzExpert.activity.LoginActivity + || topActivity instanceof cn.shangyu.gdxzExpert.activity.BindNumberActivity + || topActivity instanceof cn.shangyu.gdxzExpert.activity.RegistActivity) { + return; + } + lastJumpLoginTime = now; + Context targetContext = context != null ? context : (topActivity != null ? topActivity : appCtx); + if (targetContext == null) { + return; + } + Intent intent = new Intent(targetContext, LoginNewActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + if (!(targetContext instanceof Activity)) { + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + } + targetContext.startActivity(intent); + } + }); + return true; + } catch (Exception e) { + return false; + } + } + public static boolean checkLoginAndJump(Context context) { if (isLogined()) { return true;