调用MainActivity中getStory时出现invalid token structure,重启后消失如何解决?
问题描述
调用GetStory接口加载故事列表时,MainActivity的getStory()方法抛出**"invalid token structure"**错误,导致列表无法显示;重启应用后该问题自动消失,需实现无需重启即可正常加载列表的效果。已确认token已成功保存,排除空token的可能性。
可能原因及修复建议
Token缺少
Bearer前缀
绝大多数后端API要求Authorization请求头格式为Bearer {token},若直接使用纯token字符串,会触发格式错误。重启后可能因为初始化流程补全了前缀,请求恢复正常。
检查getStory()里构建请求头的代码,确保格式正确:// 示例:正确拼接前缀(根据实际代码语言调整) val authorization = "Bearer ${savedToken}"Token加载时机不对
若getStory()在token完成持久化存储前就执行,可能读取到旧的无效值。重启后token已稳定存储,请求恢复正常。
调整调用逻辑:确保在确认token保存完成后再触发getStory(),比如在存储操作的回调里、协程await()之后执行列表加载。存储工具的异步读写延迟
比如使用SharedPreferences时,写入操作可能是异步的,写完立刻读可能拿到旧数据。重启后异步写入完成,就能读到正确token。
检查存储token的代码,要么用同步写入方式,要么等写入回调触发后再发起API请求。请求客户端缓存了错误头
首次请求携带错误token后,客户端(如OkHttp/Retrofit)可能缓存了错误的请求头,导致后续请求持续失败;重启后缓存清空,请求恢复正常。
排查请求客户端配置,禁用请求头缓存,或每次请求都重新构建Authorization头。
重点代码检查方向
专注查看MainActivity中的getStory()方法,以及token的读取、存储逻辑:
- 确认读取token时是否拼接了
Bearer前缀; - 确认
getStory()是否在token存储完成后才被调用; - 检查存储token的方法是否有等待写入完成的逻辑。
内容的提问来源于stack exchange,提问作者Jeffry Susilo

