У меня проблема в том, что я не нашел, как ее решить.У меня есть этот класс, который «данные» является общим объектом
class ApiResponse <DataType>
(
@SerializedName("requestType")
val type : RequestTypeEnum,
@SerializedName("requestState")
val state : RequestStateEnum,
@SerializedName("requestAI")
val data : DataType?
) : BaseVO()
, и у меня есть класс, который извлекает данные из веб-службы или из базы данных, или и то, и другое. При создании экземпляра этого класса я передаю типрезультата, который я должен вернуть.Результат, возвращаемый из базы данных, не имеет тот же тип, что и результат, возвращаемый из веб-службы.Когда результат должен быть получен из базы данных, при создании экземпляра этого класса я передаю простой универсальный тип, который может быть, например, «Пользователь», но когда результат должен быть получен из веб-службы, я должен создать экземпляр этого класса с универсальным типом.«ApiResponse», который также содержит объект универсального типа.
Это мой класс:
abstract class DataSourceManager<ParamsType , ResultType>
, и вот как я его создал
return object : DataSourceManager<List<String> , ApiResponse<List<String>>>()
{...}.asLiveData
, когда я отображаю вВ журнале результат как String отображает корректно
{
"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]}
Некоторая помощь, пожалуйста?