android - ejemplo - retrofit kotlin
¿Cómo usar Retrofit y SimpleXML juntos para descargar y analizar un archivo XML de un sitio? (3)
Acabo de empezar a trabajar con Retrofit. Estoy trabajando en un proyecto que utiliza SimpleXML. ¿Alguien me puede dar un ejemplo en el que uno obtiene un XML de un sitio, por ejemplo, http://www.w3schools.com/xml/simple.xml "y lo lee?
Aquí es cómo hacerlo con Retrofit 2 .
Primero necesita una interfaz como (las anotaciones de encabezados son opcionales):
public interface ApiService
{
@GET("xml/simple.xml")
@Headers({"Accept: application/xml",
"User-Agent: Retrofit-Sample-App"})
Call<BreakfastMenu> getBreakfastMenu();
}
Los POJO anotados para XML son los mismos que en las otras respuestas.
Entonces necesitas hacer una solicitud al servidor:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.w3schools.com/")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call<BreakfastMenu> call = apiService.getBreakfastMenu();
Response<BreakfastMenu> response = call.execute();
// response.code() == 200
BreakfastMenu breakfastMenu = response.body();
Las bibliotecas necesarias son:
- reequipamiento 2.3.0
- okhttp 3.8.0
- convertidor-simplexml 2.3.0
- simple-xml 2.7.1
- Java 7
Fuente disponible en mi GitHub
Creará una interfaz como una nueva clase en su proyecto:
public interface ApiService {
@GET("/xml/simple.xml")
YourObject getUser();
}
Luego en tu actividad llamarás a lo siguiente:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://www.w3schools.com")
.setConverter(new SimpleXmlConverter())
.build();
ApiService apiService = restAdapter.create(ApiService.class);
YourObject object = apiService.getXML();
Para obtener sus bibliotecas correctamente, en su archivo build.gradle debe hacer lo siguiente:
configurations {
compile.exclude group: ''stax''
compile.exclude group: ''xpp3''
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
compile ''com.squareup.retrofit:retrofit:1.6.1''
compile ''com.mobprofs:retrofit-simplexmlconverter:1.1''
compile ''org.simpleframework:simple-xml:2.7.1''
compile ''com.google.code.gson:gson:2.2.4''
}
Luego debe especificar YourObject y agregarle anotaciones de acuerdo con la estructura del archivo xml.
@Root(name = "breakfast_menu")
public class BreakFastMenu {
@ElementList(inline = true)
List<Food> foodList;
}
@Root(name="food")
public class Food {
@Element(name = "name")
String name;
@Element(name = "price")
String price;
@Element(name = "description")
String description;
@Element(name = "calories")
String calories;
}
import java.util.ArrayList;
import java.util.List;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
@Root(name = "breakfast_menu")
public class BrakfastMenu
{
@ElementList(inline = true)
protected List<Food> food;
public List<Food> getConfigurations()
{
if (food == null)
{
food = new ArrayList<Food>();
}
return this.food;
}
public void setConfigurations(List<Food> configuration)
{
this.food = configuration;
}
}