繁体   English   中英

设置时,根据API中的值在POJO中再添加两个值-Retrofit2&Gson转换器

[英]Add two more values in POJO based on a value from the API while setting it - Retrofit2 & Gson converter

首先,我对此表示歉意。 但是我只是不确定要搜索什么。

现在,我在POJO模型中设置了Retrofit2,一切正常。 但是某些节点的API会返回日期的Unix时间戳格式。 我希望在设置POJO时将其转换并设置为两个值(星期几和人类可读的日期)。

这有可能吗?如何?

POJO类似于:

public class Pojo {

    @SerializedName("id")
    @Expose
    private int id;

    @SerializedName("name")
    @Expose
    private String name;

    @SerializedName("date")
    @Expose
    private int unixDate;

    public int getId() {

        return id;
    }

    public void setId(int id) {

        this.id = id;
    }

    public String getName() {

        return name;
    }

   public void setName(String name) {

        this.name = name;
    }

    public int getUnixDate() {

        return unixDate;
    }

    public void setUnixDate(int unixDate) {

        // Tried the conversion and storing here but it of course won't work
        this.unixDate = unixDate;
   }
}

有没有一种方法可以指示Retrofit2或Gson转换器根据Unix时间戳将两个以上的值(星期几和日期)添加到POJO,但是将其他所有内容保留为默认值。

编辑:只是为了清理。 我知道如何使用ThreeTen Android Backport并将unix转换为日期和日期。 我只需要一种方法来指示Gson转换器或Retrofit2使用该逻辑。

干杯

在您的POJO中添加新字段。 不要将它们注释为暴露的。 进行改造调用时,在onResponse方法中,将值分配给自定义字段。 像这样:

call.enqueue(new Callback<List<Pojo>>() {

   public void onResponse(List<Pojo> list) {
       for (Pojo pojo : list) {
           pojo.setDayOfWeek();
           pojo.setDate();
       }
   }

}

我解释了您的问题,即在GSON中为日期解析创建自定义逻辑时遇到了问题。 问题在于该方法不指示GSON,而是使用它自己的反序列化,因此它使用该系统设置。 只需创建您自己的类并实现JsonDeserializer接口即可。

public class DiyDateParser implements JsonDeserializer<Date> {

    @Override
    public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
        Date date = new Date((long)timeStamp*1000);

      //Your implementation for date parsing

        try {
            return formatter.parse(date);
        } catch (ParseException e) {
            System.err.println("Failed to parse Date due to:", e);
            return null;
        }
    }
}

之后,您可以像这样使用它:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DiyDateParser());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM