Java 简单xml:如何注释我的;“点”;班
我必须在Android程序中表示如下数据结构:Java 简单xml:如何注释我的;“点”;班,java,android,simple-framework,Java,Android,Simple Framework,我必须在Android程序中表示如下数据结构: <?xml version="1.0" encoding="utf-8"?> <points> <point id="La Gioconda"> <rssi id="north">-55</rssi> <rssi id="east" >-76</rssi> <rssi id="south">-64<
<?xml version="1.0" encoding="utf-8"?>
<points>
<point id="La Gioconda">
<rssi id="north">-55</rssi>
<rssi id="east" >-76</rssi>
<rssi id="south">-64</rssi>
<rssi id="east" >-92</rssi>
</point>
<point id="La Pietà">
<rssi id="north">-51</rssi>
<rssi id="east" >-60</rssi>
<rssi id="south">-88</rssi>
<rssi id="east" >-59</rssi>
</point>
</points>
当然我错过了一些明显的东西…:-(
文件Points.java:
package com.marcos.training;
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
@Element
public class Points {
@ElementList(inline=true)
private List<Point> list;
public Integer getSize() {
return list.size();
}
public List<Point> getList() {
return list;
}
}
首先,您应该从Rssi和Point类中删除
@Root
,因为它们不是xml的根
其次,这里的类或xml很明显是旧的,因为错误与某个“dbm”字段有关,xml和java代码中缺少了该字段。我假设,在较新的版本中,您有如下内容:
<rssi id="north" dbm="55"/>
首先,您应该从Rssi和Point类中删除
@Root
,因为它们不是xml的根
其次,这里的类或xml很明显是旧的,因为错误与某个“dbm”字段有关,xml和java代码中缺少了该字段。我假设,在较新的版本中,您有如下内容:
<rssi id="north" dbm="55"/>
问题出在您的
Rssi
类上。Rssi
元素没有子元素,因此以下注释不正确:
@Element
protected Integer rssi;
您需要改用@Text
注释:
@Text
protected Integer rssi;
或者,最好使用元素映射
来保存rssi映射,而不是列表。例如,您可以将点
类更改为:
@Root
public class Point {
@ElementMap(entry="rssi", key="id", attribute=true, inline=true)
private Map<String,Integer> rssiMap;
@Attribute
protected String id;
public String getId() {
return id;
}
public Integer getRssi(String id) {
Integer val = rssiMap.get(id);
if(val == null){
return 999;
}
return val;
}
}
@Root
公共课点{
@ElementMap(entry=“rssi”,key=“id”,attribute=true,inline=true)
私有映射rssiMap;
@属性
受保护的字符串id;
公共字符串getId(){
返回id;
}
公共整数getRssi(字符串id){
整数val=rssiMap.get(id);
if(val==null){
返回999;
}
返回val;
}
}
问题在于您的Rssi
类。Rssi
元素没有子元素,因此以下注释不正确:
@Element
protected Integer rssi;
您需要改用@Text
注释:
@Text
protected Integer rssi;
或者,最好使用元素映射
来保存rssi映射,而不是列表。例如,您可以将点
类更改为:
@Root
public class Point {
@ElementMap(entry="rssi", key="id", attribute=true, inline=true)
private Map<String,Integer> rssiMap;
@Attribute
protected String id;
public String getId() {
return id;
}
public Integer getRssi(String id) {
Integer val = rssiMap.get(id);
if(val == null){
return 999;
}
return val;
}
}
@Root
公共课点{
@ElementMap(entry=“rssi”,key=“id”,attribute=true,inline=true)
私有映射rssiMap;
@属性
受保护的字符串id;
公共字符串getId(){
返回id;
}
公共整数getRssi(字符串id){
整数val=rssiMap.get(id);
if(val==null){
返回999;
}
返回val;
}
}
我确实按照您的第二个建议使用ElementMap,但是,在序列化我的新points类时,我遇到了以下异常:java.lang.NumberFormatException:无法将“”解析为整数:我应该以某种方式更改poinys.xml结构,还是遗漏了其他内容?Post scriptum:在简单的引号中,我有一些空格,一个新行,还有更多的空间…@Marcos a space is not不是有效的整数,因此出现NumberFormatException。您可能希望使用字符串而不是整数。我确实按照您的第二个建议使用ElementMap,但在序列化我的新points类时,出现以下异常:java.lang.NumberFormatException:无法将“”解析为整数:我应该以某种方式更改poinys.xml结构,还是遗漏了其他内容?Post scriptum:在简单的引号中,我有一些空格、新行和更多空格…@Marcos空格不是有效的整数,因此出现NumberFormatException。您可能希望使用字符串而不是整数。