【问题标题】:Converting from HttpURLConnection TO Retrofit2 Issues从 HttpURLConnection 转换为 Retrofit2 问题
【发布时间】:2018-03-05 20:31:28
【问题描述】:

我正在升级一些从服务器提取数据的旧版 Android/Java 代码。遗留代码使用 HttpURLConnection 并拉入 inputStream 并将其转换为 GZipInputStream。然后将结果转换为 JSONObject。然后手动解析数据。这一切都很好,这意味着返回有效的 json,因为它以 '{'

开头

我正在尝试使用 Retrofit2 和 GsonConverterFactory 升级此代码,以便我可以将 json 自动映射到类。

我收到一个错误:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $

这告诉我数据是以字符串而不是 JSON 对象的形式传入的。

注意:我正在为我的旧代码和新的 Retrofit 实现发送相同的标头和查询参数——但结果不同——无法弄清楚原因。

【问题讨论】:

  • 这告诉你它需要一个JSONObject,但它却找到了一个字符串。所以在使用Gson.from();时使用String.class
  • 我没有手动使用 gson。我正在使用 GsonConverterFactory

标签: java android retrofit2 gson


【解决方案1】:

问题是服务器希望我的所有查询参数都在一个字段中,并且字段名为“Object”并采用 json 格式,即:Object={"field1":"fieldOneValue","field2": "fieldTwoValue"} AND 必须是 Url Uncoded 格式:

@FormUrlEncoded
@POST("testing/myapi.api")
Observable<MyClass> getMyApiData(@Url String url,  @Field("Object") String object);

【讨论】:

    猜你喜欢
    • 2014-10-31
    • 2016-12-20
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多