Gson,枚举和尝试在空对象引用上调用虚方法'java.lang.Class java.lang.Object.getClass()'

时间:2018-04-05 08:18:43

标签: java android json gson

有一个json,包含参数的String值,例如status和此json在POJO上按Gson映射,此参数映射在自定义枚举上。 JSON:

{"status":"on"}

POJO

public class StatusData {
    @SerializedName("status")
    @Expose
    private Status status;
}

枚举:

public enum Status {
   @SerializedName("on")ON,
   @SerializedName("off")OFF;
}

如果json包含正确的值(“on”或“off”) - 好的,但是如果有不支持的值,例如“未知” - 然后它与Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference粉碎。问题:是否有办法改变异常信息以理解出现了什么问题?

2 个答案:

答案 0 :(得分:1)

无需创建新类 enum

使用 http://www.jsonschema2pojo.org/ 生成pojo

试试这个

public class StatusData
{
    @SerializedName("status")
    @Expose
    private String status;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

答案 1 :(得分:0)

public class StatusData {
@SerializedName("status")
@Expose
private Status status;

public String getStatus() {
    return status;
}
}

response保存为StatusData

的对象
StatusData statusData=response;
String status=statusData.getStatus();
if(status.equals("on")){
  //code when status is "on"
} else if(status.equals("off")){
  //code when status is "off"
}

或使用gson

Gson gson = new Gson();
StatusData statusData = gson.fromJson("json response",
                                        StatusData.class);