RetroFit, SimpleXMLConverter - PullRequest
       10

RetroFit, SimpleXMLConverter

0 голосов
/ 20 декабря 2018

Я использую Retrofit с simpleXMLConverter, чтобы получить данные из XML и использовать их в моем приложении для Android.Однако я не могу связать значение определенного тега со своим значением в моем классе.В моей ситуации я пытаюсь связать mtc: gas_type с моей ценовой переменной в классе бензина.Мне удалось связать значение из простого XML-файла, который я нашел в сети, всего с двумя тегами, поэтому это означает, что я что-то не так делаю с этим конкретным XML ...

Ошибка (что означает, что он не может найтитег):

java.lang.RuntimeException: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=mtc:gas_type, required=true, type=void) on field 'price' private double com.example.alexander.ridy.Model.domain.Gasoline.price for class com.example.alexander.ridy.Model.domain.Gasoline at line -1
    at retrofit2.converter.simplexml.SimpleXmlResponseBodyConverter.convert(SimpleXmlResponseBodyConverter.java:44)
    at retrofit2.converter.simplexml.SimpleXmlResponseBodyConverter.convert(SimpleXmlResponseBodyConverter.java:23)
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:223)
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:186)
    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:92)
    at com.example.alexander.ridy.View.fragments.Ride.VehicleDetails$determineGasolineType$1.run(VehicleDetails.kt:101)
    at java.lang.Thread.run(Thread.java:764)
 Caused by: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=mtc:gas_type, required=true, type=void) on field 'price' private double com.example.alexander.ridy.Model.domain.Gasoline.price for class com.example.alexander.ridy.Model.domain.Gasoline at line -1
    at org.simpleframework.xml.core.Composite.validate(Composite.java:644)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:449)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.Persister.read(Persister.java:625)
    at org.simpleframework.xml.core.Persister.read(Persister.java:606)
    at org.simpleframework.xml.core.Persister.read(Persister.java:584)
    at org.simpleframework.xml.core.Persister.read(Persister.java:562)
    at retrofit2.converter.simplexml.SimpleXmlResponseBodyConverter.convert(SimpleXmlResponseBodyConverter.java:36)
    at retrofit2.converter.simplexml.SimpleXmlResponseBodyConverter.convert(SimpleXmlResponseBodyConverter.java:23) 
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:223) 
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:186) 
    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:92) 
    at com.example.alexander.ridy.View.fragments.Ride.VehicleDetails$determineGasolineType$1.run(VehicleDetails.kt:101) 
    at java.lang.Thread.run(Thread.java:764) 

XML:

https://www.globalpetrolprices.com/api/getGasXML_weekly.php?gasoline_diesel=2&rate=EUR&countries=183&p=c5ab37e86d514beadb60d3d3d682f363

Интерфейс конечной точки:

interface Endpoint {

@GET("/api/getGasXML_weekly.php?gasoline_diesel=2&rate=LC&countries=183&p=c5ab37e86d514beadb60d3d3d682f363")
fun getDiesel(): Call<Gasoline>

@GET("/api/getGasXML_weekly.php?gasoline_diesel=1&rate=LC&countries=183&p=c5ab37e86d514beadb60d3d3d682f363")
fun getSuper95(): Call<Gasoline>

@GET("/api/getGasXML_weekly.php?gasoline_diesel=3&rate=LC&countries=183&p=c5ab37e86d514beadb60d3d3d682f363")
fun getLPG(): Call<Gasoline>

RetrofitClientInstance:

class RetrofitClientInstance {

private var retrofit: Retrofit? = null
private val BASE_URL = "https://www.globalpetrolprices.com"

fun getRetrofitInstance(): Retrofit? {
        retrofit = retrofit2.Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(create())
            .build()
    return retrofit
}

Класс бензина:

@Root(strict = false) class Gasoline {

@field:Element(name="mtc:gas_type")
var price : Double = 0.0

lateinit var gasolineType : GasolineType

constructor()

Звонок:

    fun determineGasolineType() {
    val mySpinner = view?.findViewById(R.id.gasolineSpinner) as Spinner
    val text = mySpinner.selectedItem.toString()
    val service = RetrofitClientInstance().getRetrofitInstance()!!.create(Endpoint::class.java!!)
    lateinit var call : Call<Gasoline>
    lateinit var resp : Response<Gasoline>

    Thread({
        resp = service.getDiesel().execute()
        Log.d("",resp.body().toString())
    }).start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...