Здравствуйте, я хочу создать базовый класс вызова веб-службы. Я пытаюсь автоматически конвертировать модели, но не могу
моя функция
fun <T> callService(callback: (String, T?) -> Unit, url: String, body: Any?, isSharedApi: Boolean = false) {
configureRequest(url, body, isSharedApi).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
callback(Utils.failedNetworkMessage, null)
}
override fun onResponse(call: Call, response: Response) {
try {
val gson = GsonBuilder()
val collectionType = object : TypeToken<BaseResponse<T>>(){}.type
val resp = gson.create().fromJson<BaseResponse<T>>(response?.body()?.string()!!, collectionType)
if (resp.status != "success") {
callback(resp.error, null)
} else {
callback("", resp.data)
}
} catch (e: Throwable) {
callback(Utils.failedStatic, null)
}
}
})
}
мой базовый класс ответа
data class BaseResponse<T>(val status: String,
val error: String,
var data: T)
и я получаю эту ошибку, когда попробуйте этот код
com.google.gson.internal.LinkedTreeMap не может быть приведен к com.inte c .tabletmenu.Data.Models.Auth
вызов этой службы подобным образом, если я отправляю в службу, подобную этой, callService работает, но с параметром класса не работает
callService<Auth>({ i, data ->
if (data != null) saveData(data, authKey)
callback(i)
}, WebServices.Account, loginModel, true)
что именно я должен делать?
базовые свойства ответа всегда будут постоянными только при изменении свойства данных, спасибо за помощь