Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单xml:如何注释我的;“点”;班_Java_Android_Simple Framework - Fatal编程技术网

Java 简单xml:如何注释我的;“点”;班

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<

我必须在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</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。您可能希望使用字符串而不是整数。