Jackson – 使用loadDataFromNetwork()方法使用Robospice读取JSON数组

我正在尝试读取JSON数组,其格式如下: [{"vehicle_id":"76","color":"red"},{"vehicle_id":"7","color":"blue"}]遵循Robospice的入门指南 。

Vehicle.java

 public class Vehicle { @JsonProperty("vehicle_id") private int vehicleID; @JsonProperty("color") private String color; } 

(塞特犬和吸气者跟随)

给出错误的类:VehiclesRequest.class

 public class VehiclesRequest extends SpringAndroidSpiceRequest { private static final String METHOD = "systemVehicles"; public SystemVehiclesRequest() { super(Vehicle.class); } @Override public Vehicle[] loadDataFromNetwork() throws Exception { return getRestTemplate().getForObject( FULL_URL, Vehicle[].class); } } 

如您所见,我重写了loadDataFromNetwork()方法,然后将其传递给我的活动中的spiceManager.execute()方法,并使用自定义侦听器从请求中读取数据。 但是我无法从loadDataFromNetwork()返回数组(我也尝试使用List loadDataFromNetwork() ,这里最好的解决方法是什么? 我知道我可以以不同的方式获取数据,但我仍然希望使用我的监听器并能够以这种方式进行try块。

我通过添加Vehicles类解决了这个问题:

 @JsonIgnoreProperties(ignoreUnknown = true) public class Vehicles extends ArrayList { public Vehicles() { } } 

并改变loadDataFromNetwork()方法:

 public Vehicles loadDataFromNetwork() throws Exception { return getRestTemplate().getForObject( FULL_URL, Vehicles.class); } 

注意到您应该将数组类型传递给超级构造函数:

 public class VehiclesRequest extends SpringAndroidSpiceRequest { private static final String METHOD = "systemVehicles"; public SystemVehiclesRequest() { super(Vehicle[].class); } @Override public Vehicle[] loadDataFromNetwork() throws Exception { return getRestTemplate().getForObject( FULL_URL, Vehicle[].class); } } 

我认为使用数组类型比创建扩展ArrayList的新类更合理。