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

时间:2016-09-14 19:47:43

标签: java android json android-studio retrofit2

我正在尝试使用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()&gt;&gt;&gt;这始终为空 vehicleData.isMessage()&GT;&GT;这是假设的假。

有谁可以帮助我,并建议我做错了什么?

1 个答案:

答案 0 :(得分:2)

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