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?
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;
}
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;
}
}
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:
Quelle verfügbar auf meinem GitHub