2016-09-14 42 views
0

我想在android中使用Retrofit解析以下JSON。Android- Retrofit - java.lang.NullPointerException:尝试调用虚拟方法

{ 
"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() >>>这始终为空 vehicleData.isMessage() >>这是错误的预期。

任何人都可以请帮助我在这里,并建议我做错了什么?

+0

'VehicleJSONResponse'为什么这个班?你认为它在你的json响应中映射到哪里? – njzk2

回答

1

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

相关问题