2015-08-09 21 views
5

Ich habe einige Probleme bei der Integration von Simple XML-Konverter in Retrofit für Android konfrontiert.
1). Ich habe einen Kompilierungsfehler erhalten, nachdem ich "compile ('com.squareup.retrofit: converter-simplexml: 1.9.0')" in build.gradle hinzugefügt habe.Probleme bei der Integration von einfachen XML-Konverter in Retrofit für Android

Fehlerbericht: Information: Gradle Aufgaben [: App: assembleDebug] Achtung: Abhängigkeit xpp3: xpp3: 1.1.3.3 für Debug ignoriert wird, wie es mit der internen Version zur Verfügung gestellt von Android widersprüchlich sein kann. Falls ein Problem auftritt, packen Sie es bitte mit jarjar neu, um die Klassenpakete zu ändern. Warnung: Abhängigkeit xpp3: xpp3: 1.1.3.3 wird für die Veröffentlichung ignoriert, da sie möglicherweise mit der von Android bereitgestellten internen Version in Konflikt steht. Im Falle eines Problems, bitte packen Sie es mit Jarjar um die Klassenpakete zu ändern

2). Ich habe Java-Schemas mit Hilfe dieses http://pojo.sodhanalibrary.com/Convert erstellt, indem ich Root-Klassennamen zur Verfügung gestellt habe. Und ich bekomme weiterhin InstantiateException oder ElementException für das eine oder andere Element und mazorly retrofit.converter.ConversionException: org.simpleframework.xml.core.ValueRequiredException: Kann @ org.simpleframework.xml.Element nicht erfüllen (data = false, name = description , erforderlich = wahr, typ = void) auf Feld "Beschreibung". Derselbe Fehler für viele Felder.

Antwort

12

AUSGABE 1).
Ich musste meinem build.gradle folgenden hinzufügen. Da diese Pakete bereits mit Android ausgeliefert werden, gab es Probleme.

compile ('com.squareup.retrofit:converter-simplexml:1.9.0') { 
     exclude group: 'xpp3', module: 'xpp3' 
     exclude group: 'stax', module: 'stax-api' 
     exclude group: 'stax', module: 'stax' 
    } 

AUSGABE 2).
Ich musste die Java-Klassenhierarchie haben, die mit dem ersten Element beginnen sollte, das in XML ist. Ich hatte "Rss" als erstes Element in meinem XML. Und während ich die Schemas mit http://pojo.sodhanalibrary.com/Convert generierte, gab ich meinen eigenen Namen etwas wie "Warnungen", die Klassen für alle erforderlichen Elemente erzeugten. Und Warnings.java hatte das Instanzmitglied "Rss". Anstatt Rss zu übergeben, hatte ich Warnings zur Nachrüstung übergeben. Callback.

Class Warnings { 
    private Rss rss; 
    ..... 
    ..... 
} 

Class Rss { 
    private Channel channel; 
    ..... 
    ..... 
} 

Es könnte Hierarchie von Klassen zu einem gewissen Grad finden, aber es begann Fehler/Ausnahmen geben für alle Felder aller Klassen in Frage erwähnt, obwohl sie vorhanden zu sein scheinen.
Nachdem ich ziemlich viel Zeit mit der Behebung dieser Fehler verbracht habe, habe ich die Antwortklasse geändert, die von Warnings an Rss an retrofit.Callback übergeben wurde und das hat funktioniert.

XML:

<rss version="2.0"> 
<channel>...</channel> 
</rss> 

Dies war mein Retrofit Anforderungscode mit Fehlern:

retrofitService.getWarnings(lat, lon, authKey, new Callback<Warnings>() { 
      @Override 
      public void success(WarningsResponse warningsResponse, Response response) { 
      // handle success response.. 
      } 

      @Override 
      public void failure(RetrofitError error) { 
      // handle error response 
       } 
     }); 

Arbeitscode:

retrofitService.getWarnings(lat, lon, authKey, new Callback<Rss>() { 
      @Override 
      public void success(WarningsResponse warningsResponse, Response response) { 
      // handle success response.. 
      } 

      @Override 
      public void failure(RetrofitError error) { 
      // handle error response 
       } 
     }); 

Die einzige diff ist die Klasse Rückruf übergeben.

Verwenden Sie also den Klassennamen des Root-Elements in XML, um an Callback zu übergeben, damit die XML-zu-Java-Objektkonvertierung problemlos durchgeführt werden kann.

Sie diese Diskussion in XML Integration finden Hilfe-Website nachzurüsten:
https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter/