2

我开发了具有客户端服务器和数据库的 android 应用程序。

我使用 gson 来解析服务器和客户端之间的对象。

我的日期类型是 java.sql.date

当我运行此代码时(消息是我创建的对象......):

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

为什么我有这个例外?

4

2 回答 2

1

Gson 默认日期适配器和日期格式不同。您需要注册 SQL 日期类型适配器,并在反序列化 JSON 之前设置预期的日期格式。

SqlDateTypeAdapter sqlAdapter = new SqlDateTypeAdapter();
Gson gson = new GsonBuilder()
   .registerTypeAdapter(java.sql.Date.class, sqlAdapter )
   .setDateFormat("yyyy-MM-dd")
   .create();

现在使用这个gson对象来解析数据。

编辑

将格式从更改yyyy/MM/ddyyyy-MM-dd

于 2015-05-22T13:42:29.003 回答
1

我将 registerTypeAdapter 更改为 java.util.date 现在它可以工作了:

        SqlDateTypeAdapter sqlAdapter = new SqlDateTypeAdapter();
        Gson gson = new GsonBuilder()
            .registerTypeAdapter(java.util.Date.class, sqlAdapter )
            .setDateFormat("yyyy-MM-dd")
            .create();

我不确定它为什么会起作用。我的类型是 sql.Date,但这是有效的..

于 2015-05-24T22:14:05.113 回答