fromJson引发了无法解析的日期异常

时间:2015-05-22 13:13:29

标签: java android date gson unparseable

我开发了具有客户端服务器和数据库的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

为什么我有这个例外?

2 个答案:

答案 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..