【发布时间】:2018-08-25 15:01:21
【问题描述】:
我有一个问题,我没有找到解决方法。 我有这个“数据”是通用对象的类
class ApiResponse <DataType>
(
@SerializedName("requestType")
val type : RequestTypeEnum,
@SerializedName("requestState")
val state : RequestStateEnum,
@SerializedName("requestAI")
val data : DataType?
) : BaseVO()
我有一个类可以从 web 服务或数据库或两者中获取数据。当实例化这个类时,我传递了我必须返回的结果类型。从数据库返回的结果与从 Web 服务返回的结果类型不同。当必须从数据库中获取结果时,通过实例化这个类,我传递了一个简单的泛型类型,例如“用户”,但是当必须从 web 服务中获取结果时,我必须用泛型类型来实例化这个类“ApiResponse”也包含一个泛型类型对象。
这是我的课:
abstract class DataSourceManager<ParamsType , ResultType>
这是我实例化它的方式
return object : DataSourceManager<List<String> , ApiResponse<List<String>>>()
{...}.asLiveData
当我在日志中将结果显示为字符串时,它会正确显示
{
"requestType": "WEB_SOCKET_TEST_SPONSOR_CODE",
"requestState": "ERROR",
"requestAI": [
"ERROR_MISSING_INFORMATIONS"
]
}
但问题是当我尝试将其反序列化为通过实例化类传递的结果类型时,它无法转换为所需的类型。
这是我的反序列化尝试
val apiResponse = convertFromString<ResultType>(pApiResponseAsString)
.
.
.
fun <T> convertFromString(pDataAsString : String?) : T?
{
val dataType : Type = object : TypeToken<T>(){}.type
return Gson().fromJson<T>(pDataAsString , dataType)
}
当我尝试将结果视为转换后的对象时,出现错误:
java.lang.ClassCastException: libcore.reflect.TypeVariableImpl cannot be cast to com.PackageName.ApiResponse
但是当我在日志中显示结果时,发现这种格式无效:
{requestType=WEB_SOCKET_TEST_SPONSOR_CODE, requestState=ERROR, requestAI=[ERROR_MISSING_INFORMATIONS]}
请帮忙?
【问题讨论】: