2017-02-21 688 views
3

我想通过使用Retrofit从URL获取书籍xml数据。但是当应用程序运行时,它显示错误。我很新,所以请帮助我。以下是错误消息:如何解决org.simpleframework.xml.core.ValueRequiredException:无法满足@ org.simpleframework.xml.ElementList()

02-20 23:06:37.943 23835-23835/com.santossingh.reader E/error: 
org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, name=work, required=true, type=void) on field 'works' public java.util.List com.santossingh.reader.AWS.GoodReadsModels.Results.works for class com.santossingh.reader.AWS.GoodReadsModels.Results at line 2 

这里是XML文件的结构和我的模型和类:

1- URL XML文件的结构:

<?xml version="1.0" encoding="UTF-8"?> 
     <GoodreadsResponse> 
      <Request> 
      <authentication>true</authentication> 
       <key><![CDATA[xxxxx]]></key> 
      <method><![CDATA[search_index]]></method> 
      </Request> 
      <search> 
      <query><![CDATA[business]]></query> 
      <results-start>1</results-start> 
      <results-end>20</results-end> 
      <total-results>109755</total-results> 
      <source>Goodreads</source> 
      <query-time-seconds>0.22</query-time-seconds> 
      <results> 
       <work> 
      <id type="integer">17624817</id> 
      <books_count type="integer">85</books_count> 
      <ratings_count type="integer">156992</ratings_count> 
      <text_reviews_count type="integer">8489</text_reviews_count> 
      <original_publication_year type="integer">2011</original_publication_year> 
      <original_publication_month type="integer" nil="true"/> 
      <original_publication_day type="integer" nil="true"/> 
      <average_rating>4.01</average_rating> 
      <best_book type="Book"> 
      <id type="integer">12609433</id> 
      <title>The Power of Habit: Why We Do What We Do in Life and Business</title> 
      <author> 
       <id type="integer">5201530</id> 
       <name>Charles Duhigg</name> 
      </author> 
      <image_url>https://images.gr-assets.com/books/1366758683m/12609433.jpg</image_url> 
      <small_image_url>https://images.gr-assets.com/books/1366758683s/12609433.jpg</small_image_url> 
      </best_book> 
     </work> 
     <results> 

这里是清晰度更高的结构XML 文件的结构清晰度< imagelink>。 Results.class的

2-型号:Work.class的

@Root (name = "results", strict = false) 
public class Results { 

    @ElementList (name = "work", inline = true) 
    public List<Work> works; 

    public Results() { 
    } 

    public Results(List<Work> works) { 
     this.works = works; 
    } 

    public List<Work> getWorks() { 
     return works; 
    } 

    public void setWorks(List<Work> works) { 
     this.works = works; 
    } 
} 

2-型号:

@Root(name = "work", strict = false) 
public class Work { 

    @Path("best_book") 
    @Element(name = "id") 
    private int id; 

    @Path("best_book") 
    @Element (name = "title") 
    private String title; 

    @Path("best_book/author") 
    @Element(name = "name") 
    private String author; 

    @Path("best_book") 
    @Element (name = "image_url") 
    private String image; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getAuthor() { 
     return author; 
    } 

    public void setAuthor(String author) { 
     this.author = author; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 
} 

回答

7

我找到了答案。在Result.class中,只需更改@ElementList()参数。这里是解决方案:

错误 -

@ElementList(name = "work", inline = true) 
    public List<Work> works; 

解决方案 -

@ElementList(inline = true, required = false) 
    public List<Work> works; 

每当发生错误只记得在@ElementList)两件事情(

1- inline=true 
2- required=false 
example : @ElementList(inline = true, required = false) 
0

我曾经面临这个问题也是。看看文档,它说如下。

The ValueRequiredException is thrown when an attribute or element is missing from the XML document. This is thrown only if the attribute or element is required according to the annotation for that field within the XML schema class. 

基本上这是在形成的请求和XML请求模式之间存在不匹配时发生的。

因此,使用注释

@ElementList(name="XMLNode", required = false) 
public <<DataType>> XMLNode; 

required = false生成器将忽略这个标签,并建立请求的其余节点。

P.S: 当您使用相同的类形成XML请求并解析响应时,这非常有用。