android – How to use Retrofit and SimpleXML together in downloading and parsing an XML file from a site?-ThrowExceptions

Exception or error:

I just started working with Retrofit. I am working on a project that uses SimpleXML. Can somebody provide me an example in which one fetches an XML from a site e.g.” and reads it out?

How to solve:

You will create an interface as a new class in your project:

public interface ApiService {
    YourObject getUser();

Then in your activity you will call the following:

RestAdapter restAdapter = new RestAdapter.Builder()
                    .setConverter(new SimpleXmlConverter())

ApiService apiService = restAdapter.create(ApiService.class);
YourObject object = apiService.getXML();

To get your libraries correctly, in your build.gradle file you need to do the following:

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

Then you need to specify YourObject and add annotations to it according to the structure of the xml file

@Root(name = "breakfast_menu")
public class BreakFastMenu {
    @ElementList(inline = true)
    List<Food> foodList;

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

    public void setConfigurations(List<Food> configuration)
      { = configuration;



Here’s how to do it with Retrofit 2.

First you need an interface like (headers annotations are optional) :

public interface ApiService

    @Headers({"Accept: application/xml",
            "User-Agent: Retrofit-Sample-App"})
    Call<BreakfastMenu> getBreakfastMenu();


The annotated POJOs for XML are the same as in the other answers.

Then you need to make a request to the server :

    Retrofit retrofit = new Retrofit.Builder()

    ApiService apiService = retrofit.create(ApiService.class);
    Call<BreakfastMenu> call = apiService.getBreakfastMenu();
    Response<BreakfastMenu> response = call.execute();
    // response.code() == 200
    BreakfastMenu breakfastMenu = response.body();

The needed libraries are :

  • retrofit 2.3.0
  • okhttp 3.8.0
  • converter-simplexml 2.3.0
  • simple-xml 2.7.1
  • Java 7

Source available on my GitHub

Leave a Reply

Your email address will not be published. Required fields are marked *