繁体   English   中英

SimpleXML Android错误ValueRequiredException

[英]SimpleXML Android Error ValueRequiredException

我正在集成SimpleXml反序列化,但每次都遇到异常。 不知道确切原因是什么。 请检查此问题下提供的详细信息。 提前致谢。

下面是模型类

import java.util.ArrayList;

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root(name = "images")
public class ImagesModel {

    @ElementList(name="image")
    private ArrayList<ImageClass> imgList = new ArrayList<ImageClass>();

    public ArrayList<ImageClass> getImageList(){
        return imgList;
    }
}


import java.util.ArrayList;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;

@Element(name = "image")
public class ImageClass {
        @Attribute(name = "name")
        private String imageName;

        public String getImageName(){
            return imageName;
        }

        public ImageClass(String imageName) {
            this.imageName = imageName;
        }

        @ElementList(name="ver")
        private ArrayList<Version> versions = new ArrayList<Version>();

        public ArrayList<Version> getVersionsList(){
            return versions;
        }
    }

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;

@Element(name = "diff")
public class PixelDetail{
        @Attribute(name = "x")
        private String x;

        public String getX(){
            return x;
        }

        @Attribute(name = "x")
        private String y;

        public String getY(){
            return y;
        }

        public PixelDetail(String x, String y) {
            this.x = x;
            this.y = y;
        }
    }

import java.util.ArrayList;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;

@Element(name = "version")
public class Version{
        @ElementList(name="diff")
        private ArrayList<PixelDetail> pixelsData = new ArrayList<PixelDetail>(); 

        public ArrayList<PixelDetail> getPixelsList(){
            return pixelsData;
        }
    }

XML结构

<images>

    <image name="Org1" >
        <version>
            <ver>
                <diff
                    x="79"
                    y="19" />

                <diff
                    x="215"
                    y="73" />

                <diff
                    x="68"
                    y="202" />

                <diff
                    x="96"
                    y="289" />

                <diff
                    x="173"
                    y="164" />
            </ver>

            <ver>
                <diff
                    x="14 "
                    y="93 " />

                <diff
                    x="57 "
                    y="46 " />

                <diff
                    x=" 192"
                    y="17" />

                <diff
                    x="180 "
                    y="139" />

                <diff
                    x="135 "
                    y="242 " />
            </ver>

            <ver>
                <diff
                    x="286 "
                    y="123" />

                <diff
                    x="31"
                    y="292" />

                <diff
                    x="170"
                    y="216" />

                <diff
                    x="189"
                    y="234" />

                <diff
                    x="131 "
                    y="286" />
            </ver>
        </version>
    </image>
    <image name="Org2" >
        <version>
            <ver>
                <diff
                    x="197"
                    y="41" />

                <diff
                    x="269"
                    y="162" />

                <diff
                    x="297"
                    y="19" />

                <diff
                    x="4"
                    y="52" />

                <diff
                    x="178"
                    y="284" />
            </ver>

            <ver>
                <diff
                    x="213"
                    y="59" />

                <diff
                    x="208"
                    y="97" />

                <diff
                    x="284"
                    y="162" />

                <diff
                    x="193"
                    y="138" />

                <diff
                    x="5"
                    y="221" />
            </ver>

            <ver>
                <diff
                    x="219"
                    y="97" />

                <diff
                    x="40"
                    y="44" />

                <diff
                    x="67"
                    y="21" />

                <diff
                    x="181"
                    y="37" />

                <diff
                    x="208"
                    y="172" />
            </ver>
        </version>
    </image>
</images>

日志猫错误

09-11 14:52:55.926: W/System.err(5525): org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Attribute(empty=, name=name, required=true) on field 'imageName' private java.lang.String com.wavinno.iotasol.spotdifference.models.ImageClass.imageName for class com.wavinno.iotasol.spotdifference.models.ImageClass at line 5

这里有一些事情要做:

正确的注释

类应该使用@Root而不是@Element

使用内联列表

这将为列表添加一个额外的image元素:

@ElementList(name="image")  
private ArrayList<ImageClass> imgList = new ArrayList<ImageClass>();

像这样:

<images>
   <image>
      <image name="abc">
         <!-- ... -->
      </image>
   </image>
</images>

因此, image -element(使用第一个!)属性不可用。 添加inline = true改为使用内联列表。

未构建版本元素

与上面的xml中一样,没有version -element。

重复注释

PixelDetail类的xy注释使用相同的名称:

    @Attribute(name = "x")
    private String x;

    @Attribute(name = "x") /* ! */
    private String y;

复制并粘贴错字? ;-)

默认构造函数

对于(反)序列化,每个类都必须具有默认构造函数。 可见性并不重要,即使是私人的也可以。


您可以在此处检查固定代码:

ImageClass

@Root(name = "image")
public class ImageClass
{
    @Attribute(name = "name")
    private String imageName;

    public String getImageName()
    {
        return imageName;
    }

    public ImageClass(String imageName)
    {
        this.imageName = imageName;
    }

    ImageClass() { }

    @ElementList(name = "version")
    private ArrayList<Version> versions = new ArrayList<Version>();

    public ArrayList<Version> getVersionsList()
    {
        return versions;
    }

}

ImagesModel

@Root(name = "images")
public class ImagesModel
{
    @ElementList(name = "image", inline = true)
    private ArrayList<ImageClass> imgList = new ArrayList<ImageClass>();

    public ArrayList<ImageClass> getImageList()
    {
        return imgList;
    }

}

PixelDetail

@Root(name = "diff")
public class PixelDetail
{
    @Attribute(name = "x")
    private String x;

    public String getX()
    {
        return x;
    }

    @Attribute(name = "y")
    private String y;

    public String getY()
    {
        return y;
    }

    public PixelDetail(String x, String y)
    {
        this.x = x;
        this.y = y;
    }

    PixelDetail() { }

}

Version

@Root(name = "version")
public class Version
{
    @ElementList(name = "diff", inline = true)
    private ArrayList<PixelDetail> pixelsData = new ArrayList<PixelDetail>();

    public ArrayList<PixelDetail> getPixelsList()
    {
        return pixelsData;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM