Closed traywangjun closed 8 months ago
刚发现了 是okhttp版本的问题,我把demo里的okhttp改为4.11.0就会出现
小伙子,我对这个问题进行了实践,确实存在这个问题,具体问题原因是 HttpData 定义了 Headers 类型的字段,即名为 responseHeaders 字段,因为 Gson 内部无法对这种类型进行序列化和反序列化,所以出现解析报错,旧版本之所以没有这个问题,是因为旧版本的 OkHttp 是用 Java 语言写的,而到了新版本,则是用 Kotlin 语言写的,解决这个问题的方法也很简单,将 responseHeaders 字段类型从 Headers 修改成 Map 类型,具体的代码改动如下:
public class HttpData<T> {
/** 响应头 */
@Nullable
private Map<String, String> responseHeaders;
public void setResponseHeaders(@Nullable Map<String, String> responseHeaders) {
this.responseHeaders = responseHeaders;
}
@Nullable
public Map<String, String> getResponseHeaders() {
return responseHeaders;
}
......
}
public final class RequestHandler implements IRequestHandler {
......
@NonNull
@Override
public Object requestSuccess(@NonNull HttpRequest<?> httpRequest, @NonNull Response response, @NonNull Type type) throws Throwable {
......
if (result instanceof HttpData) {
HttpData<?> model = (HttpData<?>) result;
Headers headers = response.headers();
int headersSize = headers.size();
Map<String, String> headersMap = new HashMap<>(headersSize);
for (int i = 0; i < headersSize; i++) {
headersMap.put(headers.name(i), headers.value(i));
}
model.setResponseHeaders(headersMap);
......
}
return result;
}
}
验证了下确实可以了
框架版本【必填】
12.8
问题描述【必填】
在readCache里调用GsonFactory.getSingletonGson().fromJson(cacheValue, type)解析异常
复现步骤【必填】
Api设置CacheMode,请求一次接口然后再次访问
是否必现【必填】
是
项目 targetSdkVersion【必填】
34
出现问题的手机信息【必填】
三星s21
出现问题的安卓版本【必填】
14
问题信息的来源渠道【必填】
自己遇到的
是部分机型还是所有机型都会出现【必答】
全部
框架最新的版本是否存在这个问题【必答】
是
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
issue 列表中是否有人曾提过类似的问题【必答】
否
是否已经搜索过了 issue 列表但还未能解决的【必答】
是
是否可以通过 Demo 来复现该问题【必答】
是
提供报错堆栈
提供截图或视频
提供解决方案
No response