是否有可能在数据类Kotlin Android中使用具有不同类和数据类型的相同键?

时间:2019-03-19 06:20:58

标签: android kotlin

我有一个关于代码数据类 kotlin android的问题。

如何实现服务器响应?有时我得到String的值,或者有时得到Object的类。

class CMSRespTemp {

    data class CMSRespApi(
        val status: Boolean = false,
        val message: String = "",
        val data: String as Data
    )

    data class Data(
        val cms_id: String = "",
        val cms_content: String = ""
    )
}

当我仅实现Data类时,它就可以工作,例如val data: Dataval data: String。但是我需要将DataString与仅关键数据一起使用。

有可能吗?

2 个答案:

答案 0 :(得分:1)

花了12个小时之后,我就得到了解决方案,

 val getResultCon = getSerCont.result // response Any
 val gson = Gson()
 val jsonElement = gson.toJsonTree(getResultCon)
 val resultData = gson.fromJson(jsonElement, SearchContactApi.Result::class.java)

使用模型类将数据字符串转换为toJsonTree和fromJson,然后得到结果。

答案 1 :(得分:0)

当同一变量具有多种类型时,我们可以使用Any类型,它等同于Java中的Object类型。所以解决方案如下:

class CMSRespTemp {

    data class CMSRespApi(
        val status: Boolean = false,
        val message: String = "",
        var data: Any? = null // changed it to var from val, so that we can change it's type runtime if required
    )

    data class Data(
        val cms_id: String = "",
        val cms_content: String = ""
    )
}

访问该变量时,可以像下面这样简单地进行铸造:

val apiResponse : CMSRespApi //= some API response here from network call
when (apiResponse.data) {
    is String -> {
        // apiResponse.data will be smart-casted to String here
    }
    else -> {
        val responseData = Gson().fromJson<CMSRespApi.Data>(
            Gson().toJsonTree(apiResponse.data),
            CMSRespApi.Data::class.java
        )
    }
}