【问题标题】:Android, org.simpleframework.xml Persistence Exception, Element 'foo' is already usedAndroid,org.simpleframework.xml 持久性异常,元素 'foo' 已被使用
【发布时间】:2013-01-23 07:19:54
【问题描述】:

我正在使用 org.simpleframework.xml 来处理 android 应用程序的一些 xml 任务,并且遇到了以下我无法弄清楚的错误。

org.simpleframework.xml.core.PersistenceException: Element 'album' is already used with @org.simpleframework.xml.ElementList(inline=false, name=album, entry=, data=false, empty=true, required=true, type=void) on field 'albums' private java.util.List us.blah.sonar.xsd.simple.AlbumList.albums at line 5
at org.simpleframework.xml.core.Variable$Adapter.read(Variable.java:484)
at org.simpleframework.xml.core.Composite.readVariable(Composite.java:613)
at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)

这是我尝试解组的 XML 示例:

<albumList> 
    <album id="3985" parent="3301" title="Bob Dylan - The Reissue Series Sampler" album="Bob Dylan - The Reissue Series Sampler" artist="48 - Masked and Anonymous [BSO] (2003)" isDir="true" created="2011-12-09T11:52:12"/> 
    <album id="3986" parent="3301" title="Soundtrack - Masked & Anonymous" album="Soundtrack - Masked & Anonymous" artist="48 - Masked and Anonymous [BSO] (2003)" isDir="true" coverArt="3986" created="2011-12-09T11:52:13"/> 
    <album id="10542" parent="145" title="A Perfect Circle" album="Acoustica" artist="A Perfect Circle" isDir="true" created="2011-12-09T12:01:52"/> 
</albumList>

以下是我创建并注释的 POJO

@Root
public class AlbumList {

    @ElementList(name="album")
    private List<Child> albums;

    public List<Child> getAlbums() {
        return albums;
    }

}

public class Child {
    @Attribute
    private String id;

    @Attribute(required=false)
    private String parent;

    @Attribute
    private boolean isDir;

    @Attribute
    private String title;

    @Attribute(required=false)
    private String album;

    @Attribute(required=false)
    private String artist;

    @Attribute(required=false)
    private int track;

    @Attribute(required=false)
    private int year;

    @Attribute(required=false)
    private String genre;

    @Attribute(required=false)
    private String coverArt;

    @Attribute(required=false)
    private long size;

    @Attribute(required=false)
    private String contentType;

    @Attribute(required=false)
    private String suffix;

    @Attribute(required=false)
    private String transcodedContentType;

    @Attribute(required=false)
    private String transcodedSuffix;

    @Attribute(required=false)
    private int duration;

    @Attribute(required=false)
    private int bitRate;

    @Attribute(required=false)
    private String path;

    @Attribute(required=false)
    private boolean isVideo;

    @Attribute(required=false)
    private String userRating;

    @Attribute(required=false)
    private double averageRating;

    @Attribute(required=false)
    private int discNumber;

    @Attribute(required=false)
    private Date created;

    @Attribute(required=false)
    private Date starred;

    @Attribute(required=false)
    private String albumId;

    @Attribute(required=false)
    private String artistId;

    @Attribute(required=false)
    private MediaType type;
}

任何人都可以指导我如何解决这个问题,或者这个错误消息究竟意味着什么?是不是因为 XML 元素被命名为专辑,并且还有一个属性也被命名为专辑?

【问题讨论】:

    标签: java android xml simple-framework


    【解决方案1】:

    尝试以这种方式注释您的 AlbumList 类:

    @Root
    public class AlbumList {
        @ElementList(entry="album", inline=true)
        private List<Child> albums;
    
        public List<Child> getAlbums() {
            return albums;
        }
    }
    

    【讨论】:

    • 那行得通。非常感谢。我不确定为什么会这样。我不认为专辑元素是内联的,因为它们是用专辑列表标签包装的。
    • 如果这个答案解决了你的问题,你可以accept它。
    • 我希望默认值是 inline=true... 我刚刚遇到了这个问题。感谢您的解决方案。
    • 如果不是列表,我应该怎么做?比如后端不正确,有两个同名节点,如何避免这个persistenceexception?
    • @McAdam331 你应该为此发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多