Хранить данные в объекте, полученном с помощью модернизации - PullRequest
0 голосов
/ 04 марта 2019

Поэтому я использую Retrofit2, чтобы получить файл JSON и прочитать его.

Часть данных - это координаты (blueCones и yellowCones), которые я хочу сохранить в объектах, а эти объекты - в массиве ArrayList.

Как разместить данные в объектах и ​​сохранить их в списке для последующего использования.

Json-файл:

{
    "engineTemp" : "90",
    "speed" : "130",
    "blueCones":[{
            "x" : 6.0,
            "y" : 5.0
        },
        {
            "x" : 7.0,
            "y" : 7.0
        }
    ],
    "yellowCones":[{
            "x" : 11.0,
            "y" : 5.0
        },
        {
            "x" : 12.0,
            "y" : 6.0
        }
    ]
}

Интерфейс:

interface JsonApi {

    @GET("/test.json")
    fun getAllData(): Call<Data>
}

Start Retrofit:

    val service = JsonParser.jsonParserInstance?.create(JsonApi::class.java)
    val call = service?.getAllData()

    call?.enqueue(object : Callback<Data>{
        override fun onFailure(call: Call<Data>, t: Throwable) {
            Toast.makeText(applicationContext, "Error reading JSON", Toast.LENGTH_LONG).show()
        }

        override fun onResponse(call: Call<Data>, response: Response<Data>) {
            val body = response.body()

            val engineTemp = body?.engineTemp
            val speed = body?.speed
            val blueCoordinates = body?.blueCones
            val yellowCoordinates = body?.yellowCones
        }
    })
}

Соединение:

object JsonParser{
    private var retrofit: Retrofit? = null
    private val BASE_URL = "http://10.0.2.2:80"

    val jsonParserInstance: Retrofit?

        get(){
            if(retrofit==null){
                retrofit = retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
            }
            return retrofit
        }
}

Классы синего и желтого конусов:

data class BlueCone(var x: Double, var y: Double)

data class YellowCone(var x: Double, var y: Double)

1 Ответ

0 голосов
/ 04 марта 2019

Поскольку вы используете Gson, вы можете легко сопоставить JSON с вашими объектами.Он использует имя переменной для отображения по умолчанию, поэтому я просто следовал вашей схеме именования.

Во-первых, вам нужен только один Cone класс.

data class Cone(
    val x: Float,
    val y: Float
)

И затем вы можете создатькласс, содержащий полный ответ.

data class MyResponse(
    val engineTemp: String,
    val speed: String,
    val blueCones: List<Cone>,
    val yellowCones: List<Cone>
)

И с вашим интерфейсом вы можете установить класс.

@GET("/test.json")
fun getAllData(): Call<MyResponse>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...