如何访问 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/