杰克逊 - 使用loadDataFromNetwork()方法在Robospice中读取JSON数组

3

我正在尝试读取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;
}

(setters和getters如下)

出现错误的类: VehiclesRequest.class

public class VehiclesRequest extends SpringAndroidSpiceRequest<Vehicle> {

    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<>),这里有什么最好的解决方法?我知道我可以以不同的方式获取数据,但我仍然想使用我的侦听器并能够使用try块。
2个回答

5

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

@JsonIgnoreProperties(ignoreUnknown = true)
public class Vehicles extends ArrayList<Vehicle> {

    public Vehicles() {
    }

}

loadDataFromNetwork() 方法更改为:

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

0

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

public class VehiclesRequest extends SpringAndroidSpiceRequest<Vehicle[]> {

    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<Vehicle>的新类更合理,以使事情正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接