我有一个WCF服务,它向Android应用程序返回对象列表。其中一个属性是DateTime属性。返回格式是JSON,我将在安卓端以这种格式获取/Date(1441117247253+0200)/
格式的日期。我使用com.square up.retufit:retrofit:1.9.0从我的服务中获取数据。
我不知道如何使用Retrofit将字符串日期创建为date对象。我在“自定义转换器”部分下查看了这个http://square.github.io/retrofit/,但不知道如何更进一步。这是我尝试过的,但我不知道如何实现转换器类。
创建restAdapter如下所示:
restAdapter = new RestAdapter.Builder()
.setConverter(new DotNetDateConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
以及我不知道如何进一步实现的DotNetDateConverter类:
public class DotNetDateConverter implements Converter
{
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException
{
return null;
}
@Override
public TypedOutput toBody(Object object)
{
return null;
}
}
响应中还有其他字段很好,但是如何将/Date(1441117247253+0200)/
更改为适当的java.util.Date对象?如果没有转换器,我显然会得到com.google.gson.JsonSyntaxException:/Date(1441117247253+0200)/
,因为字符串不能转换到日期。
任何援助都将不胜感激。
发布于 2015-09-03 14:30:09
好吧,经过一番周旋,我偶然发现了this。我的方法是错的。所以我最终创建了这样一个转换器:
public class DotNetDateConverter implements JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
String s = json.getAsJsonPrimitive().getAsString();
long l = Long.parseLong(s.substring(s.indexOf("(")+1, s.indexOf("+")));
Date d = new Date(l);
return d;
}
}
我还必须这样注册:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DotNetDateConverter());
restAdapter = new RestAdapter.Builder()
.setConverter(new GsonConverter(gsonBuilder.create()))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(API).build();
我不得不稍微修改代码,以适应我的特定场景,即日期以/Date(1441117247253+0200)/
的形式出现在时区中。也许其他人会发现这有什么用..。
https://stackoverflow.com/questions/32362580
复制相似问题