尝试从距离矩阵 api 获取距离数据始终返回 NULL



对不起,英语不好。 我试图使用改造和 moshi 来解析 json 来访问距离数据,这是 json 响应

{
"destination_addresses": [
"Jl. Juanda 7A No.3, Air Hitam, Kec. Samarinda Ulu, Kota Samarinda, Kalimantan Timur 75243, Indonesia"
],
"origin_addresses": [
"Jl. Dayak Modang No.28, Sempaja Sel., Kec. Samarinda Utara, Kota Samarinda, Kalimantan Timur 75131, Indonesia"
],
"rows": [
{
"elements": [
{
"distance": {
"text": "2.9 mi",
"value": 4687
},
"duration": {
"text": "11 mins",
"value": 651
},
"status": "OK"
}
]
}
],
"status": "OK"
}

这是我使用的改造电话和获取距离方法

//THIS CALL IS INSIDE COUROUTINE SCOPE
RetrofitBuilder(ConstantUtil.DISTANCE_API_URL).apiService.getDistance(origin = "${param[0]},${param[1]}", destination = "${param[2]},${param[3]}")
//GET DISTANCE METHOD
@GET("maps/api/distancematrix/json")
suspend fun getDistance(
@Query(value = "units") units: String = "metric",
@Query(value = "origins") origin: String,
@Query(value = "destinations") destination: String,
@Query(value = "key") key: String = ConstantUtil.API_KEY
): DistanceResponseData

这是我使用的距离响应数据"POJO">

data class DistanceResponseData (
@field:Json(name = "rows") val rows: List<Rows>
)
data class Rows (
@field:Json(name = "elements") val elements: List<Elements>
)
data class Elements (
@field:Json(name = "distance") val distance: ItemData,
@field:Json(name = "duration") val duration: ItemData,
@field:Json(name = "status") val status: String
)
data class ItemData (
@field:Json(name = "text") val rawText: String,
@field:Json(name = "value") val rawValue: Int
)

如果我记录来自 Call 的返回响应,我会得到我需要的所有数据,从行到元素内的数据,但是当我尝试仅访问与元素的距离对象时,它总是返回 null 值,请参阅下面的代码。

//Here's when i log the DistanceResponseData object returned from call (got all data i need)
2020-02-06 13:42:55.232 20358-20358/com.vjtechsolution.kurir.service I/System.out: debug: distance data DistanceResponseData(rows=[Rows(elements=[{distance={text=4.9 km, value=4887.0}, duration={text=13 mins, value=766.0}, status=OK}])])
//But when im trying to access only the distance data using ${distanceData.rows[0].elements[0], it return null value for everything, even the DistanceResponseData log that worked before became null
2020-02-06 13:47:07.515 21107-21107/com.vjtechsolution.kurir.service I/System.out: debug: distance data DistanceResponseData(rows=[Rows(elements=[Elements(distance=null, duration=null, status=OK)])])
2020-02-06 13:47:07.516 21107-21107/com.vjtechsolution.kurir.service I/System.out: debug: distance elements Elements(distance=null, duration=null, status=OK)
//below code i use for logging the result
println("debug: distance data $distanceData")
println("debug: distance elements ${distanceData.rows[0].elements[0]}")

有人可以解释为什么会发生这种情况吗? 以及如何解决它? 已经 2 天了,我一直被这个问题困住了。

谢谢

我看到你缺少一些信息,F.E你没有对类的正确注释。 这是一个很好的指南。 https://proandroiddev.com/getting-started-using-moshi-for-json-parsing-with-kotlin-5a460bf3935a

最新更新