[英]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
類的x
和y
注釋使用相同的名稱:
@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.