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