При настройке добавьте еще два значения в POJO на основе значения из API - Retrofit2 & Gson converter - PullRequest
0 голосов
/ 06 февраля 2019

Прежде всего, я прошу прощения, если уже есть ответ на этот вопрос.Но я просто не уверен, что искать.

Теперь у меня установлена ​​Retrofit2 с моей моделью POJO, и все работает нормально.Но 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 добавить еще два значения (день недели и дату) в POJO на основе метки времени Unix, но иметь всеиначе по умолчанию, как есть.

РЕДАКТИРОВАТЬ: Просто чтобы прояснить.Я знаю, как использовать ThreeTen Android Backport и конвертировать Unix в дату и день.Мне просто нужен способ указать Gson converter или Retrofit2 использовать эту логику.

Cheers

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Я интерпретировал вашу проблему, которая возникла у вас при создании пользовательской логики для разбора даты в 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());
0 голосов
/ 06 февраля 2019

Добавьте новые поля в ваш POJO.Не комментируйте их как выставленные.При выполнении вызова дооснащения в методе onResponse присвойте значение настраиваемым полям.Как то так:

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

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

}
...