如何访问 Class 从 Kotlin/Android 中的 JSON 创建的属性
How can I access Data Class Properties created from JSON in Kotlin/Android
我刚刚开始使用 Android/Kotlin,我遇到了一些非常基本的问题。我使用改装 return JSON:
[
{
"id": "45837",
"date_time": "2022-02-02 12:50:06",
"pool_filter_status": "0",
"pool_temperature": "97.59",
"target_temperature": "97.3",
"status_changed": "1"
}
]
在我的视图模型 class 中,我有以下从服务器检索代码的函数:
...
private val _pooldata = MutableLiveData<List<PoolData>>()
val pooldata: LiveData<List<PoolData>> = _pooldata
...
private fun getPoolData() {
viewModelScope.launch {
_status.value = PoolApiStatus.LOADING
try {
_pooldata.value = PoolDataApi.retrofitService.getPoolData()
_status.value = PoolApiStatus.DONE
} catch (e: Exception) {
_status.value = PoolApiStatus.ERROR
}
}
}
就其价值而言,它始终只是一个 JSON 对象(尽管它位于单个元素数组中)
我真正愚蠢的问题是如何访问数据对象的属性 / returned JSON.
如果我记录 _pooldata.value.toString(),我只会得到:
[PoolData(id=45833, date_time=2022-02-02 12:30:02, pool_filter_status=1, pool_temperature=96.91, target_temperature=97.3, status_changed=0)]
此时我只是想“通过做”来理解 Kotlin,但我不明白如何访问这些值(id、date_time 等)。它不是 _pooldata.id.value、_pooldata[0].id.value 等
数据class设置为:
data class PoolData(
val id: String,
val date_time: String,
val pool_filter_status: String,
val pool_temperature: String,
val target_temperature: String,
val status_changed: String
)
谢谢。
您提供的数据 class 作为改造将保存您的数据的数据格式,并且您的数据 class 仅引用一个对象。
您需要的是代表 PoolData 的数据数组 classes。
例如:
data class JsonFromApi(val headers: String , listOfPoolData: List<PoolData>..etc)
从这里您将引用此 class 来访问像 JsonFromApi.listOfPoolData 这样的 PoolData,这将是一个列表,然后您可以使用索引号来访问任何元素。
例如:
JsonFromApi.listOfPoolData[index] // which will be of PoolData type with all defined properties
您需要创建两个 class。第一个用于数组,第二个用于数组中存在的 JSON 对象。
对于数组
class Data : ArrayList<DataItem>()
//Ignore class name
对于JSON对象
data class DataItem(
val date_time: String,
val id: String,
val pool_filter_status: String,
val pool_temperature: String,
val status_changed: String,
val target_temperature: String
)
如果您不想自己创建数据 class,那么在 android 工作室中有一个名为 JSON 的 Kotlin class 插件。
访问这个 link 了解更多
https://www.instagram.com/p/CW7UNzZj0gv/
我刚刚开始使用 Android/Kotlin,我遇到了一些非常基本的问题。我使用改装 return JSON:
[
{
"id": "45837",
"date_time": "2022-02-02 12:50:06",
"pool_filter_status": "0",
"pool_temperature": "97.59",
"target_temperature": "97.3",
"status_changed": "1"
}
]
在我的视图模型 class 中,我有以下从服务器检索代码的函数:
...
private val _pooldata = MutableLiveData<List<PoolData>>()
val pooldata: LiveData<List<PoolData>> = _pooldata
...
private fun getPoolData() {
viewModelScope.launch {
_status.value = PoolApiStatus.LOADING
try {
_pooldata.value = PoolDataApi.retrofitService.getPoolData()
_status.value = PoolApiStatus.DONE
} catch (e: Exception) {
_status.value = PoolApiStatus.ERROR
}
}
}
就其价值而言,它始终只是一个 JSON 对象(尽管它位于单个元素数组中)
我真正愚蠢的问题是如何访问数据对象的属性 / returned JSON.
如果我记录 _pooldata.value.toString(),我只会得到:
[PoolData(id=45833, date_time=2022-02-02 12:30:02, pool_filter_status=1, pool_temperature=96.91, target_temperature=97.3, status_changed=0)]
此时我只是想“通过做”来理解 Kotlin,但我不明白如何访问这些值(id、date_time 等)。它不是 _pooldata.id.value、_pooldata[0].id.value 等
数据class设置为:
data class PoolData(
val id: String,
val date_time: String,
val pool_filter_status: String,
val pool_temperature: String,
val target_temperature: String,
val status_changed: String
)
谢谢。
您提供的数据 class 作为改造将保存您的数据的数据格式,并且您的数据 class 仅引用一个对象。 您需要的是代表 PoolData 的数据数组 classes。
例如:
data class JsonFromApi(val headers: String , listOfPoolData: List<PoolData>..etc)
从这里您将引用此 class 来访问像 JsonFromApi.listOfPoolData 这样的 PoolData,这将是一个列表,然后您可以使用索引号来访问任何元素。
例如:
JsonFromApi.listOfPoolData[index] // which will be of PoolData type with all defined properties
您需要创建两个 class。第一个用于数组,第二个用于数组中存在的 JSON 对象。
对于数组
class Data : ArrayList<DataItem>()
//Ignore class name
对于JSON对象
data class DataItem(
val date_time: String,
val id: String,
val pool_filter_status: String,
val pool_temperature: String,
val status_changed: String,
val target_temperature: String
)
如果您不想自己创建数据 class,那么在 android 工作室中有一个名为 JSON 的 Kotlin class 插件。
访问这个 link 了解更多 https://www.instagram.com/p/CW7UNzZj0gv/