- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相对简单的类。我在我的服务器上使用 JDK 1.7 序列化它,并在我的客户端上使用 Android 2.2 反序列化它,两者都使用简单的 xml 2.6.2。该类包含我用@Attribute 注释的日期字段。生成的 XML 看起来像这样:
<daySchedule id="e086b34c-2836-4ecb-af36-5764e3f44b21" date="2012-03-29 00:00:00.0 BST">
<driver id="022cbb89-1226-4d85-ac28-b4848f3bc4ae" name="Julian"/>
<job id="1e444bf0-59ec-44f6-8f94-01e8606caa27" scheduledStartTime="2012-03-27 23:05:00.0 BST">
<location id="8c00f18a-fc97-4f2c-a369-ec4efe62f4bb" clientId="92797509-600c-47b4-989d-150c7e695e95" name="The Phantom Coach">
<gpsPoint latitude="52.390499114990234" longitude="-1.5485700368881226"/>
</location>
<task id="c6adff66-b342-4d24-874a-e676ce720af8" locationId="8c00f18a-fc97-4f2c-a369-ec4efe62f4bb" name="Have a drink" description="Something non-alcoholic, probably Diet Pepsi."/>
</job>
</daySchedule>
当我尝试反序列化它时,我得到的异常是:
03-29 14:06:58.975: W/System.err(1583): java.text.ParseException: Unparseable date: 2012-03-29 00:00:00.0 BST
03-29 14:06:58.975: W/System.err(1583): at java.text.DateFormat.parse(DateFormat.java:645)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.transform.DateType$DateFormat.getDate(DateType.java:189)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.transform.DateType.getDate(DateType.java:112)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.transform.DateTransform.read(DateTransform.java:75)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.transform.DateTransform.read(DateTransform.java:44)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.transform.Transformer.read(Transformer.java:104)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Support.read(Support.java:185)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.PrimitiveFactory.getInstance(PrimitiveFactory.java:105)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Primitive.readTemplate(Primitive.java:231)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Primitive.read(Primitive.java:171)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Primitive.read(Primitive.java:126)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.readVariable(Composite.java:687)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.readInstance(Composite.java:635)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.readAttribute(Composite.java:558)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:474)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.readSection(Composite.java:387)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.read(Composite.java:367)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.readDefault(Composite.java:262)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.read(Composite.java:232)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.read(Composite.java:202)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Composite.read(Composite.java:150)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Persister.read(Persister.java:632)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Persister.read(Persister.java:613)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Persister.read(Persister.java:591)
03-29 14:06:58.985: W/System.err(1583): at org.simpleframework.xml.core.Persister.read(Persister.java:550)
03-29 14:06:58.995: W/System.err(1583): at org.simpleframework.xml.core.Persister.read(Persister.java:451)
03-29 14:06:58.995: W/System.err(1583): at net.meridiandigital.binco.demo.LocationList$2.doInBackground(LocationList.java:78)
03-29 14:06:58.995: W/System.err(1583): at net.meridiandigital.binco.demo.LocationList$2.doInBackground(LocationList.java:1)
03-29 14:06:58.995: W/System.err(1583): at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-29 14:06:58.995: W/System.err(1583): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-29 14:06:58.995: W/System.err(1583): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-29 14:06:58.995: W/System.err(1583): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-29 14:06:58.995: W/System.err(1583): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-29 14:06:58.995: W/System.err(1583): at java.lang.Thread.run(Thread.java:1096)
这可能与 Java: unparseable date exception 中讨论的问题有关但我的问题是如何解决这个问题?有没有一种方法可以修复简单 xml 中的日期处理,从而避免在 Android 中使用错误代码?
更新 1:
有趣的数据点,这是 Android 设备上生成的文档中的日期:
2012-03-30 07:00:38.552 GMT+01:00
这看起来很好用。那么,也许有一种方法可以说服服务器上的 Java 以这种格式生成日期,而不是使用“BST”(或者可能是其他类似的时区名称)?
最佳答案
我从来没有找到告诉系统不要使用符号时区名称的方法。通过使用 SimpleDateFormat 中与 RFC822 兼容的时区支持,我几乎可以得到正确的日期格式,但它不是很正确。最后,我只是决定强制系统使用 GMT 时间:
private static final class GMTDateTransform implements Transform<Date>
{
ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat> () {
protected SimpleDateFormat initialValue ()
{
SimpleDateFormat r = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS zzz");
r.setTimeZone (TimeZone.getTimeZone ("GMT"));
return r;
}
};
public Date read (String source) throws Exception
{
return sdf.get ().parse (source);
}
public String write (Date source) throws Exception
{
return sdf.get ().format (source);
}
}
然后我使用了一个 Matcher,它在被要求匹配 Date 类时返回 GMTDateTransform 的静态实例,并在我创建它时将其传递给 Persister:
final GMTDateTransform transform = new GMTDateTransform();
return new Persister(new Matcher() {
@Override
public Transform match(Class cls) throws Exception {
if (cls == Date.class) return transform;
return null;
}
});
(上面的代码是我的实际代码所做的简化,因为我有其他具有自定义转换的类,并使用类的 HashMap 来转换映射以找到正确的映射)
关于java - 在别处序列化的 SimpleXML 反序列化对象给出 UnparseableDateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926049/
这里发生了什么事? $string = XML; $xml = simplexml_load_string($string); // $xmlobj = sim
当我将 SimpleXML 解析为对象数组的一部分的字符串时,我一直坚持让 SimpleXML 返回一个对象。 $a = '1145869290false43false'; $resultA = si
我有两个 SimpleXML 对象。如何将一个对象添加为另一个对象的子元素。 请注意,这不能通过 addChild 方法完成,因为它会在添加之前将给定值转换为字符串。 最佳答案 我发现 SimpleX
http://pastie.org/1701923这是从我查询邮政编码的 API 返回的 XML。 我想从每个条目中提取数据,然后直接对其进行循环或将其放入我可以循环的数组中。我似乎无法正确处理。这是
这个问题在这里已经有了答案: remove xml version tag when a xml is created in php (10 个答案) 关闭 7 年前。 我使用 SimpleXML
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。 SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:
我有一些看起来像这样的 XML: true 42 ;jsessionid=42 SimpleXML 以这种方式解析它: $obj
我有一个具有命名空间属性的 XML 文档。 XML 看起来像: 我如何提取 and
我想从元素id的属性创建一个数组,但是以下代码返回所有XML。 PHP文件: $xmlfile=simplexml_load_file("test.xml"); $test=$xmlfile->xpa
我有一个看起来像这样的XML结构: 0 Some survey question Answer 1 0 Answ
我正在尝试访问具有命名空间声明的节点中没有命名空间声明的节点列表。我的 XML 文件有一个带有命名空间 ehd 的主节点,在同一命名空间内有两个子节点 header、body。但是,主体节点内的所有子
我正在使用 SimpleXML 和 XPath 尝试获取子节点('IndexEntry)属性('indexKey')的值。节点的命名空间,我已在另一个节点(“记录”)上成功测试。由于某种原因,该节点的
我有两棵 XML 树,想将一棵树作为叶子添加到另一棵树上。 显然: $tree2->addChild('leaf', $tree1); 不起作用,因为它仅复制第一个根节点。 好吧,所以我想我应该遍历整
我正在使用 SimpleXML http://simple.sourceforge.net/home.php 在我的 Android 应用程序中, 我从 API 获取数据如下:
我想使用 SimpleXML 读取并解析包含员工信息的 XML 文件。框架。这是我的 XML 文件: 29 Pankaj
我正在尝试在 android 中使用 simplexml 解析此 xml 字符串: " " 是的,我知道门标签应该立即关闭,而不是在声明所有门标签后关闭,我无法控制这个
我有一个具有这种结构的 XML 文件:
请,我需要解析包含汽车信息的 XML 文件。我在汽车、照片中完成了所有操作,但我需要在额外的表中包含 id、汽车表 id 的外键,并且所有汽车都有随机的 Equipment_id。 我需要将其放入“设
我有一个看起来像这样的 xml: 在 xml 映射 java 代码中我有这样的东西: public class A { @Element(required=false)
我有一个xml文档如下: Calculations Description First Description Alan
我是一名优秀的程序员,十分优秀!