改造 - 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
中没有数组
我正在尝试使用 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
中没有数组