Android- Retrofit - java.lang.NullPointerException:尝试调用虚方法



我试图在android中使用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
    }
  }
}

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

public class VehicleModel {
    @SerializedName("message")
    @Expose
    private boolean message;
    @SerializedName("suggestions")
    @Expose
    private boolean suggestions;
    @SerializedName("vehicle")
    @Expose
    private Vehicle vehicle;
    public boolean isMessage() {
        return message;
    }
    public boolean isSuggestions() {
        return suggestions;
    }
    public Vehicle getVehicle() {
        return vehicle;
    }
}

Vehicle.java

public class Vehicle {
    @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 isParked() {
        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 String lat;
    @SerializedName("lng")
    @Expose
    private String lng;
    public String getLat() {
        return lat;
    }
    public String getLng() {
        return lng;
    }
}

VehicleJSONResponse.java

public class VehicleJSONResponse {
    private VehicleModel vehicle;
    public VehicleModel getVehicleJSONResponse() {
        return vehicle;
    }
}

这是我如何解析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 = jsonResponse.getVehicleJSONResponse();`

现在的问题是,当我尝试使用下面的代码检索数据,我得到消息和建议的值如预期的。但我得到了vehicle=null代码检索数据vehicleData.getVehicle()>>>这总是nullvehicleData.isMessage()>>

有谁能在这里帮助我并建议我做错了什么吗?

您正在从服务器获得VehicleModel json的响应。因此,将VehicleRequestInterface中的VehicleJsonResponse替换为VehicleModel,它应该按预期工作。

最新更新