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
的新类更合理。