wake-up-neo.com

Wie können Retrofit und SimpleXML gemeinsam beim Herunterladen und Analysieren einer XML-Datei von einer Site verwendet werden?

Ich habe gerade erst mit Retrofit gearbeitet. Ich arbeite an einem Projekt, das SimpleXML verwendet. Kann mir jemand ein Beispiel geben, in dem man XML von einer Site abruft, z. http://www.w3schools.com/xml/simple.xml "und liest es vor?

17
greenspand

Sie erstellen eine Schnittstelle als neue Klasse in Ihrem Projekt:

public interface ApiService {
    @GET("/xml/simple.xml")
    YourObject getUser();
}

Dann rufen Sie in Ihrer Aktivität Folgendes an:

RestAdapter restAdapter = new RestAdapter.Builder()
                    .setEndpoint("http://www.w3schools.com")
                    .setConverter(new SimpleXmlConverter())
                    .build();

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

Um Ihre Bibliotheken korrekt abzurufen, müssen Sie in Ihrer build.gradle-Datei Folgendes tun:

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

Dann müssen Sie YourObject angeben und entsprechend der Struktur der XML-Datei Anmerkungen hinzufügen

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

  }
2
greenspand

So geht's mit Retrofit 2.

Zunächst benötigen Sie eine Schnittstelle wie (Kopfanmerkungen sind optional):

public interface ApiService
{

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

}

Die annotierten POJOs für XML sind die gleichen wie in den anderen Antworten.

Dann müssen Sie eine Anfrage an den Server stellen:

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

Die benötigten Bibliotheken sind:

  • nachrüstung 2.3.0
  • okhttp 3.8.0
  • converter-simplexml 2.3.0
  • simple-xml 2.7.1
  • Java 7

Quelle verfügbar auf meinem GitHub

1
Guillaume Husta