【问题标题】:Gson, enum and Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object referenceGson、枚举和尝试在空对象引用上调用虚拟方法“java.lang.Class java.lang.Object.getClass()”
【发布时间】:2018-04-05 18:44:24
【问题描述】:

有一个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 一起粉碎。还有问题:有没有办法更改异常消息以了解出了什么问题?

【问题讨论】:

    标签: java android json gson


    【解决方案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;
        }
    }
    

    【讨论】:

    • 然后我想使用 enum,但没有 String,我知道我可以更改 getter 和 setter,并将 String 和 Enum 映射到那里,但我只想抛出具有可理解描述的异常
    【解决方案2】:
    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);
    

    【讨论】:

    • 是的,这将有助于解决这个问题,但我只想为异常设置自定义消息,也许 Gson 的一些策略可以帮助解决这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    相关资源
    最近更新 更多