簡體   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