2013-09-13 1 views
3

Я пытаюсь прочитать массив JSON, который имеет следующий формат: [{"vehicle_id":"76","color":"red"},{"vehicle_id":"7","color":"blue"}], следуя за Starter Guide Robospice.Джексон - чтение массива JSON с помощью Robospice с использованием метода loadDataFromNetwork()

Vehicle.java

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

(сеттера и добытчики следуют)

Класса, который дает ошибку: 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() и n передавая его методу spiceManager.execute() внутри моей активности и считывая данные из запроса с использованием пользовательского прослушивателя. Однако я не могу вернуться и массировать (я тоже пробовал с List<>) от loadDataFromNetwork(), что было бы лучшим обходным решением здесь? Я знаю, что могу получить данные по-другому, но я хочу по-прежнему использовать свой слушатель и иметь возможность сделать этот блок try.

ответ

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); 
    } 
} 

И я думаю, что это выглядит разумно, используя rray типа, чем создание нового класса, расширяющего ArrayList<Vehicle>, чтобы все получилось.

 Смежные вопросы

  • Нет связанных вопросов^_^