【问题标题】:GSON conversion error when a null field contains subfields空字段包含子字段时的 GSON 转换错误
【发布时间】:2018-04-26 21:07:19
【问题描述】:

我正在尝试使用 Retrofit2 和 GSON 解析来自 Wordpress plugins API 的 JSON 结果。我使用众所周知的website 生成了我的 POJO,并将其修改为以下模型:

PluginsApiResponse.java

public class PluginsApiResponse {

    @SerializedName("plugins")
    @Expose
    private List<Plugin> plugins = null;

    public List<Plugin> getPlugins() {
        return plugins;
    }

    public void setPlugins(List<Plugin> plugins) {
        this.plugins = plugins;
    }
}

插件.java

public class Plugin {

    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("homepage")
    @Expose
    private String homepage;
    @SerializedName("screenshots")
    @Expose
    private Screenshots screenshots;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHomepage() {
        return homepage;
    }

    public void setHomepage(String homepage) {
        this.homepage = homepage;
    }

    public Screenshots getScreenshots() {
        return screenshots;
    }

    public void setScreenshots(Screenshots screenshots) {
        this.screenshots = screenshots;
    }

}

Screenshots.java

public class Screenshots {

    @SerializedName("1")
    @Expose
    private com.dkalsan.retrofitwordpress._1 _1;
    @SerializedName("2")
    @Expose
    private com.dkalsan.retrofitwordpress._2 _2;
    @SerializedName("3")
    @Expose
    private com.dkalsan.retrofitwordpress._3 _3;

    public com.dkalsan.retrofitwordpress._1 get1() {
        return _1;
    }

    public void set1(com.dkalsan.retrofitwordpress._1 _1) {
        this._1 = _1;
    }

    public com.dkalsan.retrofitwordpress._2 get2() {
        return _2;
    }

    public void set2(com.dkalsan.retrofitwordpress._2 _2) {
        this._2 = _2;
    }

    public com.dkalsan.retrofitwordpress._3 get3() {
        return _3;
    }

    public void set3(com.dkalsan.retrofitwordpress._3 _3) {
        this._3 = _3;
    }

}

_1.java(_2.java 和_3.java 相同)

public class _1 {

    @SerializedName("src")
    @Expose
    private String src;
    @SerializedName("caption")
    @Expose
    private String caption;

    public String getSrc() {
        return src;
    }

    public void setSrc(String src) {
        this.src = src;
    }

    public String getCaption() {
        return caption;
    }

    public void setCaption(String caption) {
        this.caption = caption;
    }

}

如果 screenshots 字段不包含任何条目,则会出现此问题。我已经设置了 HttpLoggingInterceptor,它完整地记录了响应代码 200 和 json。根据以下article,我还排除了它是互联网连接问题的可能性。如果我从模型中删除屏幕截图字段,则解析没有问题。是否有可能由于 GSON 尝试反序列化不存在的字段 123 而导致错误仍然存​​在,如果是,如何处理用它?

【问题讨论】:

    标签: java android gson retrofit2


    【解决方案1】:

    原来问题出在 JSON 响应格式上。如果没有屏幕截图,则将其格式化为 JSON 数组,否则将其格式化为包含对象 1、2、3 等的 JSON 对象。我已按照this stackoverflow question 上的答案设法修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多