fromJson 引发无法解析的日期异常
fromJson raises unparseable date exception
我开发了 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: Unparseable date:
"2011-11-05" (at offset 0)
我的数据库上的值确实是 2011-11-05
并且我的消息日期的类型也是 java.sql.date
.
为什么我有这个异常?
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/dd
更改为 yyyy-MM-dd
我将 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,但这是有效的..
我开发了 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: Unparseable date: "2011-11-05" (at offset 0)
我的数据库上的值确实是 2011-11-05
并且我的消息日期的类型也是 java.sql.date
.
为什么我有这个异常?
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/dd
更改为 yyyy-MM-dd
我将 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,但这是有效的..