From f67cf3b81a00f732ca743431258ae6b78f5f40ab Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期四, 17 四月 2025 15:05:28 +0800
Subject: [PATCH] 11、我的 切换头像 点击切换头像没有显示允许存储权限的窗口,华为的手机目前有 49、首页 实时刷新 点击全部取件或其他分类后,回到上一层,内容没有刷新(5个分类) 52、数据统计 数据统计 1.周月年的柱状图统计逻辑需要修改为只统计快递类的数据 2.按年的图形统计,右下方加上图示说明 53、首页 首页登录 点击用户协议、隐私政策无反应
---
app/src/main/java/com/example/firstapp/network/TokenExpiredInterceptor.kt | 45 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/network/TokenExpiredInterceptor.kt b/app/src/main/java/com/example/firstapp/network/TokenExpiredInterceptor.kt
index 1c73d50..dcc4a2f 100644
--- a/app/src/main/java/com/example/firstapp/network/TokenExpiredInterceptor.kt
+++ b/app/src/main/java/com/example/firstapp/network/TokenExpiredInterceptor.kt
@@ -1,19 +1,54 @@
package com.example.firstapp.network
+import android.content.Context
+import android.content.Intent
+import android.widget.Toast
+import com.example.firstapp.activity.LoginActivity
import com.example.firstapp.utils.PreferencesManager
import okhttp3.Interceptor
import okhttp3.Response
+import kotlin.concurrent.thread
-class TokenExpiredInterceptor : Interceptor {
+class TokenExpiredInterceptor(private val context: Context) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val response = chain.proceed(chain.request())
- // 如果返回401,说明token可能过期
- if (response.code == 401) {
- PreferencesManager.clearUserData() // 清除本地token
- // TODO: 处理token过期,例如跳转到登录页面
+ // 如果返回401或后端自定义的token失效状态码,说明token可能过期
+ if (response.code == 401 || isTokenInvalid(response)) {
+ // 清除本地token
+ PreferencesManager.clearUserData()
+
+ // 在主线程中显示提示并跳转到登录页面
+ thread {
+ android.os.Handler(context.mainLooper).post {
+ Toast.makeText(context, "登录已失效,请重新登录", Toast.LENGTH_LONG).show()
+
+ // 创建跳转到登录页面的Intent,并添加清除任务栈的标志
+ val intent = Intent(context, LoginActivity::class.java).apply {
+ flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+ }
+ context.startActivity(intent)
+ }
+ }
}
return response
}
+
+ // 检查响应是否表示token失效
+ private fun isTokenInvalid(response: Response): Boolean {
+ try {
+ // 尝试读取响应体,检查自定义的错误码
+ // 注意:这会消耗响应体,如果需要在后续处理中使用响应体,需要克隆
+ val responseBody = response.peekBody(4096).string()
+
+ // 根据您的后端逻辑,检查是否包含token失效的提示
+ // 这里假设后端在返回JSON中包含了错误码和消息
+ return responseBody.contains("\"code\":\"401\"") ||
+ responseBody.contains("token失效") ||
+ responseBody.contains("请重新登录")
+ } catch (e: Exception) {
+ return false
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3