![](/img/trans.png)
[英]Parsing json with retrofit2 gson-converter, with fields of another name
[英]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.