【问题标题】:Jackson - reading a JSON array with Robospice using loadDataFromNetwork() methodJackson - 使用 loadDataFromNetwork() 方法使用 Robospice 读取 JSON 数组
【发布时间】:2013-09-18 12:26:28
【问题描述】:

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

Vehicle.java

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

(setter 和 getter 紧随其后)

给出错误的类: 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&lt;&gt;),这里最好的解决方法是什么?我知道我可以以不同的方式获取数据,但是我想仍然使用我的监听器,并且能够以这种方式阻止 try

【问题讨论】:

    标签: java android arrays json robospice


    【解决方案1】:

    我通过添加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);
    }
    

    【讨论】:

      【解决方案2】:

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

      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&lt;Vehicle&gt; 的新类更合理。

      【讨论】:

        猜你喜欢
        • 2014-12-27
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 2014-09-21
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多