2017-02-21 686 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請求並解析響應時,這非常有用。