改造解析空数组[]

时间:2015-06-18 20:34:32

标签: android gson retrofit

我需要解析对象列表,这可以是emply。 {"data":[]} 我使用了用

调用的tamplated callback CallBack<T>
public static DataList {
    public List<Data> data
};

api.getData(new Callback<DataList>() {...});

它因错误而崩溃:java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com...DataList 请帮忙

2 个答案:

答案 0 :(得分:1)

你的模型应该可以正常工作。也许你的服务器没有返回你的想法,或者它不是application/json它返回的是什么?

这是一个快速演示:

在网址http://www.mocky.io/v2/5583c7fe2dda051e04bc699a上执行GET将返回以下json:

{
  data: [ ]
}

如果你运行以下课程,你会发现它运作正常:

public class RetrofitDemo {

  interface API {

    @GET("/5583c7fe2dda051e04bc699a")
    void getDataList(Callback<DataList> cb);
  }

  static class DataList {

    List<Data> data;
  }

  static class Data {
  }

  public static void main(String[] args) {

    API api = new RestAdapter.Builder()
        .setEndpoint("http://www.mocky.io/v2")
        .build()
        .create(API.class);

    api.getDataList(new Callback<DataList>() {

      @Override
      public void success(DataList dataList, Response response) {
        System.out.println("dataList=" + dataList);
      }

      @Override
      public void failure(RetrofitError retrofitError) {
        throw retrofitError;
      }
    });
  }
}

答案 1 :(得分:0)

您的问题是您的java模型没有反映它尝试反序列化的数据。

//{"data":[]} does not map to List<Data> data. 
// If the server was just returning an array only then it would work. 
// It will match to the entity below make sure your cb = Callback<MyItem>
public class MyItem {
    List<Data> data;
}