将数据存储在通过改造获得的对象中

时间:2019-03-04 01:15:12

标签: android json kotlin retrofit2

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

1 个答案:

答案 0 :(得分: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>