Я получаю:
com.google.gson.internal.LinkedTreeMap cannot be cast to Message class
Я хочу преобразовать объект любого типа в свой пользовательский класс.Я пытаюсь gson преобразовать объект в JSON, а затем строку JSON в мой класс Message
.
Я создал функцию с общим преобразованием типов с помощью Gson.
//Custom Class
data class Message(
@SerializedName("content")
val content: String? = null
)
//My abstract class
abstract class EchoListener<T> {
companion object {
private val TAG = EchoListener::class.java.simpleName
}
abstract fun onDataReceived(data: T?)
fun submitData(it: Any) {
Log.e(TAG, "Echio data ${it}")
val gson = Gson()
val json = gson.toJson(it)
val data: EchoData<T> = gson.fromJson(json, genericType<EchoData<T>>())
Log.e(TAG, "Converted data ${data.data}")
onDataReceived(data.data)
}
}
inline fun <reified T> genericType() = object : TypeToken<T>() {}.type
class SomeClass {
fun <T> listen(event: String, callback: EchoListener<T>) {
val listener = Emitter.Listener {
Log.e(TAG, "Data ${it[1]}")
if (it.size > 1)
callback.submitData(it[1])
}
this.socket.on(event, listener)
this.bind(event, listener)
}
}
//Main Activity
someClassObj?.listen("chat", object : EchoListener<Message>() {
override fun onDataReceived(data: Message?) {
Log.e(TAG, "Message ${data}")
}
})