Retrofit 2、GSON 和自定义解析
Retrofit 2, GSON and custom parsing
我正在使用 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 ),但它对我不起作用。
此外,Whosebug 中与此相关的问题与特定 Json 响应相关,而不是通用响应。
请提供有用的link/相同的解决方案
请检查您的 POJO class
-----------------------------------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;
}
}
我猜,由于响应是列表,所以这就是导致错误的原因。
如果你像这样声明你的 POJO
public class ResponseData {
@SerializedName("state")
@Expose
public String state;
@SerializedName("districtData")
@Expose
public List<DistrictDatum> districtData = null;
}
然后您需要在改造中更改 Call 对象的参数,使其看起来像这样:
Call<ArrayList<ResponseData> loadDataFromApi();
编辑:DistrictDatum
还必须是 class 字段来自 API。
我正在使用 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 ),但它对我不起作用。 此外,Whosebug 中与此相关的问题与特定 Json 响应相关,而不是通用响应。
请提供有用的link/相同的解决方案
请检查您的 POJO class
-----------------------------------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;
}
}
我猜,由于响应是列表,所以这就是导致错误的原因。
如果你像这样声明你的 POJO
public class ResponseData {
@SerializedName("state")
@Expose
public String state;
@SerializedName("districtData")
@Expose
public List<DistrictDatum> districtData = null;
}
然后您需要在改造中更改 Call 对象的参数,使其看起来像这样:
Call<ArrayList<ResponseData> loadDataFromApi();
编辑:DistrictDatum
还必须是 class 字段来自 API。