【问题标题】:Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $?预期 BEGIN_ARRAY 但 BEGIN_OBJECT 在第 1 行第 2 列路径 $?
【发布时间】:2018-12-20 05:53:02
【问题描述】:

当我调用不受天气影响的 API 时

https://api.apixu.com/v1/forecast.json?key=8f71b99b716f4278b98103446181912&q=Paris

问题是

  1. 我的邮递员和使用 Call in Retrofit 我得到数据
  2. 使用 POJO 类时出现响应错误

错误 预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

Call<List<DetailsMain>> listCall = api.getDetailsByParameter("8f71b99b716f4278b98103446181912", "Paris");

listCall.enqueue(new Callback<List<DetailsMain>>() {
        @Override
        public void onResponse(Call<List<DetailsMain>> call, Response<List<DetailsMain>> response) {
            DetailsMainList.setValue(response.body());
            Log.d("data", "" + response.body());
        }

        @Override
        public void onFailure(Call<List<DetailsMain>> call, Throwable t) {
            Log.d("Error", "" + t.getMessage());
        }
});

【问题讨论】:

  • 请不要在公共平台或任何问答网站上分享您的 API 密钥。有人可能会滥用这些密钥。使用您从服务器获得的虚拟 API 密钥和发布示例 (JSON) 响应。你能不能请edit这个问题并在这里发布POJO课程。该 API 返回 JSONObject 但在您的客户端中,您期望 JSONArray (List&lt;DetailsMain&gt;) 这是错误的并导致上述错误。
  • 分享你的 POJO 课程

标签: java android retrofit2


【解决方案1】:

检查您的 POJO。检查它是否与您收到的响应一致。根据您提到的错误,您在响应中得到了一个 JsonObject,您在 POJO 中声明了一个 JsonArray。

【讨论】:

  • 在这里分享你的 pojo ..你 pojo 的问题是你在寻找列表 (JsonArray) 时将 JsonObject 作为数据,请更正你的 pojo
  • 我给你加了加号,因为你年轻而愉快。 :) 而且还想获得评分。
  • @CoolMind blagodaryu vas 欣赏 :)
  • @ChandraniChatterjee,哇,你给我留下了深刻的印象! Очень приятно вас слышать! Khoroshego dnya,devushka! :)
  • @CoolMind Вам тоже хорошего дня :)
【解决方案2】:

您正在接收响应列表,这意味着 json 从 jsonArray 开始,但响应从 Json 对象开始,因此代码必须像

Call<DetailsMain> listCall = api.getDetailsByParameter("8f71b99b716f4278b98103446181912", "Paris");

当您将改造请求排入队列时,您也必须在那里更改 List(否则编译器会显示错误)

注意:DetailsMain 是您可以从任何在线工具/android studio 插件生成的 pojo 类。

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2020-01-29
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多