簡體   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