我开发了具有客户端服务器和数据库的Android应用程序。
我使用gson来解析服务器和客户端之间的对象。
我的日期类型是j ava.sql.date
当我运行此代码时(Message是我创建的对象...):
public ArrayList<Message> getMessagesByKehilaName(String kehilaName) throws Exception {
String result = GET(URL + "getMessagesByKehilaName?kehilaName=" + kehilaName);
Gson gson = new Gson();
ArrayList<Message> am = new ArrayList<Message>(Arrays.asList(gson.fromJson(result, Message[].class)));
return am;
}
我得到了这个例外:
com.google.gson.JsonSyntaxException:java.text.ParseException:无法解析的日期: “2011-11-05”(抵消0)
我的数据库上的值确实是2011-11-05
,而我的消息日期的类型也是java.sql.date
。
为什么我有这个例外?
答案 0 :(得分:1)
Gson默认日期适配器和日期格式不同。您需要注册SQL Date类型适配器,并在反序列化JSON之前设置预期的日期格式。
SqlDateTypeAdapter sqlAdapter = new SqlDateTypeAdapter();
Gson gson = new GsonBuilder()
.registerTypeAdapter(java.sql.Date.class, sqlAdapter )
.setDateFormat("yyyy-MM-dd")
.create();
现在使用此gson
对象来解析数据。
将格式从yyyy/MM/dd
更改为yyyy-MM-dd
答案 1 :(得分:1)
I changed the registerTypeAdapter to be java.util.date and now it works:
SqlDateTypeAdapter sqlAdapter = new SqlDateTypeAdapter();
Gson gson = new GsonBuilder()
.registerTypeAdapter(java.util.Date.class, sqlAdapter )
.setDateFormat("yyyy-MM-dd")
.create();
I am not sure why it works. my type is sql.Date, but this is works..