快速点击btnData触发Retrofit请求出现Expected BEGIN_OBJECT but was STRING错误
快速点击按钮触发Retrofit请求报错的原因分析
你遇到的错误:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
仅在快速点击按钮时出现,间隔点击正常,核心原因集中在重复请求引发的响应异常,具体分这几种情况:
- 后端并发处理/限流拦截:短时间重复请求触发后端防重复提交或限流机制,返回的是文本提示(比如"请求过于频繁")而非约定的JSON对象,解析器预期JSON对象却收到字符串,直接报错。间隔点击未触发限流,后端返回正常结构。
- 前端请求未做去重/取消:快速点击发起多个并行请求,若未对重复请求做取消或去重处理,可能出现前一个请求被中断后返回异常响应(比如网络中断的错误文本),或者多个响应的数据包乱序、拼接,导致解析器拿到非预期的字符串内容。
- 模拟器网络不稳定:模拟器的网络模拟环境比真机脆弱,快速请求容易出现数据包丢失、截断或延迟,最终Retrofit收到的是不完整的响应(甚至是空白或错误提示字符串),无法按JSON对象解析。
内容的提问来源于stack exchange,提问作者soo
相关产品推荐
相关产品推荐

