我有一个关于代码数据类 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: Data
或val data: String
。但是我需要将Data
和String
与仅关键数据一起使用。
有可能吗?
答案 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
)
}
}