【问题标题】:Retrofit 2, GSON and custom parsing改造 2、GSON 和自定义解析
【发布时间】:2020-04-13 20:36:05
【问题描述】:

我正在使用 Retrofit2、Gson 来获取和解析数据。现在,我得到以下响应,创建 POJO 类不起作用 -

[
  {
    "state": "Tripura",
    "districtData": [
      {
        "district": "Gomati",
        "confirmed": 1,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      },
      {
        "district": "North Tripura",
        "confirmed": 1,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      }
    ]
  },
  {
    "state": "Nagaland",
    "districtData": [
      {
        "district": "Dimapur",
        "confirmed": 1,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      }
    ]
  }
]

我无法从此响应中获取正确的数据。我已经阅读了有关改造的自定义 JSON 解析(例如 - https://medium.com/@andersonk/retrofit-2-custom-deserializer-for-unwrapping-properties-8cb8b2ec901e ),但它对我不起作用。 此外,StackOverflow 中与此相关的问题与特定的 Json 响应有关,而不是通用的。

请提供有用的链接/解决方案

【问题讨论】:

标签: android gson retrofit2


【解决方案1】:

我的猜测是,由于响应是列表,这就是导致您的错误的原因。

如果你声明你的 POJO 是这样的

public class ResponseData {

@SerializedName("state")
@Expose
public String state;
@SerializedName("districtData")
@Expose
public List<DistrictDatum> districtData = null;

}

然后您需要在改造中更改 Call 对象的参数,使其看起来像这样:

Call<ArrayList<ResponseData> loadDataFromApi();

编辑:DistrictDatum 也必须是具有 API 字段的类。

【讨论】:

  • 非常感谢。我错过了 Call loadDataFromApi();..因为我是直接获取数据而不是作为数据列表
【解决方案2】:

请检查你的 POJO 类

 -----------------------------------com.example.Delta.java-----------------------------------

    package com.example;

    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;

    public class Delta {

    @SerializedName("confirmed")
    @Expose
    private Integer confirmed;

    public Integer getConfirmed() {
    return confirmed;
    }

    public void setConfirmed(Integer confirmed) {
    this.confirmed = confirmed;
    }

    }
    -----------------------------------com.example.DistrictDatum.java-----------------------------------

    package com.example;

    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;

    public class DistrictDatum {

    @SerializedName("district")
    @Expose
    private String district;
    @SerializedName("confirmed")
    @Expose
    private Integer confirmed;
    @SerializedName("lastupdatedtime")
    @Expose
    private String lastupdatedtime;
    @SerializedName("delta")
    @Expose
    private Delta delta;

    public String getDistrict() {
    return district;
    }

    public void setDistrict(String district) {
    this.district = district;
    }

    public Integer getConfirmed() {
    return confirmed;
    }

    public void setConfirmed(Integer confirmed) {
    this.confirmed = confirmed;
    }

    public String getLastupdatedtime() {
    return lastupdatedtime;
    }

    public void setLastupdatedtime(String lastupdatedtime) {
    this.lastupdatedtime = lastupdatedtime;
    }

    public Delta getDelta() {
    return delta;
    }

    public void setDelta(Delta delta) {
    this.delta = delta;
    }

    }
    -----------------------------------com.example.Example.java-----------------------------------

    package com.example;

    import java.util.List;
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;

    public class Example {

    @SerializedName("state")
    @Expose
    private String state;
    @SerializedName("districtData")
    @Expose
    private List<DistrictDatum> districtData = null;

    public String getState() {
    return state;
    }

    public void setState(String state) {
    this.state = state;
    }

    public List<DistrictDatum> getDistrictData() {
    return districtData;
    }

    public void setDistrictData(List<DistrictDatum> districtData) {
    this.districtData = districtData;
    }

    }

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多