将数据存储在通过Retrofit接收的对象中

问题描述 投票:-1回答:1

所以我使用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>
}

开始改造:

    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)
android json kotlin retrofit2
1个回答
0
投票

由于您使用的是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>
© www.soinside.com 2019 - 2024. All rights reserved.