改造 - Android - 预期 BEGIN_ARRAY 但实际 BEGIN_OBJECT

Retrofit - Android - Expected BEGIN_ARRAY but was BEGIN_OBJECT

我正在尝试使用 Retrofit 解析以下 JSON 数据 { "message": false, "suggestions": false, "vehicle": { "parked": true, "uin": "15", "vin": "WBAEG1312MCB42267", "make": "Bmw", "model": "E8SERIES", "color": "Blue", "year": "1991", "package": "Premium", "options": "", "interior": "Color: Cream, Type:Leather", "exterior": "", "activity": "Parked", "username": "Dhruba Sarma", "timestamp": "04-Sep, 00:35", "latlng": { "lat": 12.899270164792, "lng": 77.646080134509 } } }

我已经创建了我的模型 classes 如下 - VehicleModel.java

`public class 车辆模型 {

@SerializedName("message")
@Expose
private Boolean message;
@SerializedName("suggestions")
@Expose
private Boolean suggestions;
@SerializedName("vehicle")
@Expose
private Vehicle vehicle;

public Boolean getMessage() {
    return message;
}

public Boolean getSuggestions() {
    return suggestions;
}

public Vehicle getVehicle() {
    return vehicle;
}

Vehicle.java `public class 车辆 {

@SerializedName("parked")
@Expose
private Boolean parked;
@SerializedName("uin")
@Expose
private String uin;
@SerializedName("vin")
@Expose
private String vin;
@SerializedName("make")
@Expose
private String make;
@SerializedName("model")
@Expose
private String model;
@SerializedName("color")
@Expose
private String color;
@SerializedName("year")
@Expose
private String year;
@SerializedName("package")
@Expose
private String _package;
@SerializedName("options")
@Expose
private String options;
@SerializedName("interior")
@Expose
private String interior;
@SerializedName("exterior")
@Expose
private String exterior;
@SerializedName("activity")
@Expose
private String activity;
@SerializedName("username")
@Expose
private String username;
@SerializedName("timestamp")
@Expose
private String timestamp;
@SerializedName("latlng")
@Expose
private LatLng latlng;



public Boolean getParked() {
    return parked;
}

public String getUin() {
    return uin;
}

public String getVin() {
    return vin;
}

public String getMake() {
    return make;
}

public String getModel() {
    return model;
}

public String getColor() {
    return color;
}

public String getYear() {
    return year;
}

public String getPackage() {
    return _package;
}

public String getOptions() {
    return options;
}

public String getInterior() {
    return interior;
}

public String getExterior() {
    return exterior;
}

public String getActivity() {
    return activity;
}

public String getUsername() {
    return username;
}

public String getTimestamp() {
    return timestamp;
}

public LatLng getLatlng() {
    return latlng;
}

}`

最后 LatLng.java `public class LatLng {

@SerializedName("lat")
@Expose
private Double lat;
@SerializedName("lng")
@Expose
private Double lng;

public Double getLat() {
    return lat;
}

public Double getLng() {
    return lng;
}

我什至尝试使用 jsonschema2pojo 作为参考。但我仍然收到以下错误 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期 BEGIN_ARRAY 但实际 BEGIN_OBJECT

请指出我做错了什么?

编辑-这是我解析的方式JSON

Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create()).build();

    VehicleRequestInterface request = retrofit.create(VehicleRequestInterface.class);
    Call<VehicleJSONResponse> call = request.getVehicleJSON(url);
    call.enqueue(new Callback<VehicleJSONResponse>() {
        @Override
        public void onResponse(Call<VehicleJSONResponse> call, Response<VehicleJSONResponse> response) {

            VehicleJSONResponse jsonResponse = response.body();
            vehicleData = new ArrayList<>(Arrays.asList(jsonResponse.getVehicle()));

像这样声明您的 vehicleData 变量。

ArrayList<VehicleModel> vehicleData = new ArrayList<VehicleModel>();

然后在 onResponse 而不是

vehicleData = new ArrayList<>(Arrays.asList(jsonResponse.getVehicle()));

像这样添加

vehicleData.add(jsonResponse.getVehicle())

问题是你的 json

中没有数组