【问题标题】:fromJson raises unparseable date exceptionfromJson 引发无法解析的日期异常
【发布时间】:2015-08-04 12:48:50
【问题描述】:

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

我使用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

为什么会有这个异常?

【问题讨论】:

  • 请在此处发布您的结果
  • 结果贴在上面..当我将有问题的行放在 try..catch 块中时我得到它 - 这是异常的值。

标签: java android date gson unparseable


【解决方案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

【讨论】:

  • 一开始就做到了。但仍然引发异常。
【解决方案2】:

我将 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,但这是可行的..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多