2015-08-09 37 views
5

Ho riscontrato un paio di problemi durante l'integrazione del convertitore XML semplice in retrofit per Android.
1). Stavo ricevendo errore di compilazione dopo aver aggiunto "compile ('com.squareup.retrofit: converter-simplexml: 1.9.0')" in build.gradle.Problemi durante l'integrazione del convertitore XML semplice in retrofit per Android

rapporto errori: Informazioni: compiti Gradle [: app: assembleDebug] Attenzione: Dipendenza xpp3: xpp3: 1.1.3.3 viene ignorato per il debug come può essere in conflitto con la versione interna fornita da Android. In caso di problemi, riconfezionarlo con jarjar per modificare i pacchetti di classe Avviso: Dipendenza xpp3: xpp3: 1.1.3.3 viene ignorata per il rilascio in quanto potrebbe essere in conflitto con la versione interna fornita da Android. In caso di problemi, riconfezionarlo con jarjar per modificare i pacchetti di classe

2). Ho creato schemi Java con l'aiuto di questo http://pojo.sodhanalibrary.com/Convert fornendo il nome della classe radice. E continuo a ricevere InstantiateException o ElementException per uno o l'altro elemento e mazorly retrofit.converter.ConversionException: org.simpleframework.xml.core.ValueRequiredException: Impossibile soddisfare @ org.simpleframework.xml.Element (data = false, name = description , required = true, type = void) sul campo "description". Stesso errore per molti campi.

risposta

12

NUMERO 1).
Ho dovuto aggiungere il seguito al mio build.gradle. Poiché questi pacchetti sono già dotati di Android, ci sono stati problemi.

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' 
    } 

NUMERO 2).
Ho dovuto avere la gerarchia di classi Java che dovrebbe iniziare con il primo elemento che è in XML. Ho avuto "Rss" come primo elemento nel mio XML. E mentre ho generato gli schemi usando http://pojo.sodhanalibrary.com/Convert, ho dato il mio nome qualcosa come "Warnings" che ha generato classi per tutti gli elementi richiesti. E Warnings.java aveva un membro di istanza "Rss". Invece di passare Rss, avevo passato gli Avvisi al retrofit. Richiamo.

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

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

Potrebbe trovare gerarchia di classi in una certa misura, ma è iniziato a dare errori/eccezioni menzionate in questione per tutti i campi di tutte le classi anche se sembrano essere disponibili.
Dopo aver passato un bel po 'di tempo a risolvere questi errori, ho modificato la classe di risposta che è stata passata al retrofit.Callback da Warnings a Rss e che ha funzionato.

XML:

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

Questo è stato il mio codice di richiesta retrofit con errori:

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

codice di lavoro:

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

L'unica diff è la classe passato a callback.

Quindi, utilizzare il nome classe dell'elemento root in XML per passare a Callback in modo che la conversione dell'oggetto da XML a Java possa facilmente avere successo.

Potete trovare questa discussione in integrazione XML per Retrofit sito aiuto:
https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter/