在Retrofit 2.0中检索JSON字段时出错

时间:2018-07-10 11:56:01

标签: android gson retrofit2

我有问题。 我正在使用Retrofit 2.0从我的Android应用中调用我的api。一切正常,但是当我收到一个空字段时,出现此错误:

  

期望BEGIN_OBJECT,但在行1599列8599路径处为BEGIN_ARRAY   $ .meta.pagination.links

问题出在链接字段上,有时不为空

"links": {
    "next": "http://www.example.com,
 }

但是当它为空时,会出现错误。 我的问题是,当链接字段为空时如何处理?

这是我的全部答复:

{
    "data": [
        {
        .....
        }
    ],      
    "meta": {
        "pagination": {
            "total": 50,
            "count": 50,
            "per_page": 60,
            "current_page": 1,
            "total_pages": 1,
            "links": []
        }
    }
}

这是我的POJO类:

public class ListResponse<O> {

@SerializedName("data")
private List<O> lista;
@SerializedName("meta")
private Meta meta;

public List<O> getLista() {
    return lista;
}
public String getNext() { return meta.getPagination().getLinks().getNext(); }
public int getTotal() { return meta.getPagination().getTotal(); }

public class Meta {

    @SerializedName("pagination")
    Pagination pagination;

    public Pagination getPagination(){  return pagination; }

    public class Pagination{

        @SerializedName("total")
        int total;
        @SerializedName("count")
        int count;
        @SerializedName("per_page")
        int per_page;
        @SerializedName("current_page")
        int current_page;
        @SerializedName("total_pages")
        int total_pages;
        @SerializedName("links")
        Links links;

        public int getTotal() {
            return total;
        }

        public Links getLinks() {
            return links;
        }

        public class Links {
            @SerializedName("next")
            String next;

            public String getNext() {
                return next;
            }
        }

    }
}

1 个答案:

答案 0 :(得分:1)

我建议使用JsonDeserializer。可以在herehere中找到一些示例用法。