在Kotlinandroid的数据类中,相同的键是否可能具有不同的类和数据类型?

brccelvz  于 2023-03-06  发布在  Android
关注(0)|答案(2)|浏览(140)

我有一个关于代码数据类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一起使用键数据。
有可能吗?

tjvv9vkg

tjvv9vkg1#

当同一个变量有多个类型时,我们可以使用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
        )
    }
}
xxhby3vn

xxhby3vn2#

花了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,然后得到结果。

相关问题