2017-02-21 2 views
3

Ich versuche, XML-Bücher von URL mithilfe von Retrofit zu erhalten. Aber wenn App läuft, zeigt es einen Fehler an. Ich bin neu, also bitte hilf mir. Hier ist der Fehler msg:So lösen Sie org.simpleframework.xml.core.ValueRequiredException: Ich kann @ org.simpleframework.xml.ElementList() nicht erfüllen

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 

Hier wird die XML-Dateistruktur und meine Modelle und Klassen:

1- Die Struktur der URL XML-Datei:

<?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> 

Hier ist die Klarheit der Struktur < imagelink> der Struktur XML Datei für mehr Klarheit.

2- Modell von Results.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- Modell von Work.class:

@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; 
    } 
} 

Antwort

7

fand ich die Antwort. Ändern Sie in der Result.class nur den Parameter @ElementList(). Hier ist die Lösung:

Fehler -

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

Lösung -

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

Jedes Mal, wenn dieser Fehler aufgetreten nur zwei Dinge in @ElementList erinnern()

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

ich konfrontiert dieses Problem auch. Betrachtet man die Dokumentation, so hieß es wie folgt.

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. 

Grundsätzlich tritt dies auf, wenn zwischen der erstellten Anfrage und Ihrem XML-Anforderungsschema ein Konflikt besteht.

So verwenden Sie die Anmerkung

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

Wenn required = false der Bauherr wird das Tag und bauen die verbleibenden Knoten der Anforderung ignorieren.

S.: Dies ist hauptsächlich nützlich, wenn Sie dieselbe Klasse verwenden, um die XML-Anforderung zu erstellen und die Antwort zu analysieren.

Verwandte Themen