Android Retrofit GET请求ConversionException问题

时间:2014-02-25 04:57:04

标签: android json gson retrofit

我正在使用Retrofit来发出REST请求并创建相应的模型对象(使用@SerializedName注释使用gson)。有一个特定的GET请求偶尔会导致ConversionException,并且我无法跟踪原因。我将几乎同时使用不同的参数制作10-20个类似的GET请求,其中约90%正确返回。其余的失败并发生ConversionException:

retrofit.converter.ConversionException:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第1列是STRING

一旦发生此转换异常,只要我再次尝试发出该请求(不杀死应用程序),它将始终具有相同的转换异常。如果我杀了应用程序并开始全新,它可能会工作。

我已经尝试在浏览器中查看具有此转换异常的请求的json响应,但它看起来总是正确的。我在“失败”请求和成功请求之间做了很多比较,而json看起来完全相同。

我的问题:

1)为什么会出现这些转换异常,据我所知,响应数据始终是正确的?

2)改造是否对GET请求进行任何类型的缓存?这可以解释为什么重新请求失败的请求会一直失败,直到我终止并重新启动应用程序。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

1)为什么会出现这些转换异常,据我所知,响应数据始终是正确的?

您期望的数据如下所示:

{"foo":"bar"}

但是Gson发现了更像:

Hello!

期待一个JSON对象开始(也就是{字符),但它找到了一个类似字符串的字符。

  

2)改造是否对GET请求进行任何类型的缓存?这可以解释为什么重新请求失败的请求会一直失败,直到我终止并重新启动应用程序。

Retrofit没有任何缓存。

根据您使用的HTTP客户端,它可能会根据标头缓存GET请求的响应。通常你必须选择加入HTTP客户端中的行为,所以如果你没有这样做,我怀疑它是否已启用。