У меня есть следующие поля для строки JSON:
action=surveyEventName
EventObject= serialized Event object (So in this field I want to serialize an object with Gson.
Проблема, с которой я столкнулся, заключается в том, что при попытке сериализации объекта Event я получаю ANR.Итак, я думаю, что могу сделать что-то не так с точки зрения настройки сериализации Gson.
класс событий определяется следующим образом:
class Event {
private var mActionName = ""
private var mId = ""
private lateinit var mConditions: MutableList<(Unit) -> Boolean>
private lateinit var mActions: MutableList<(Unit) -> Boolean>
fun getActionName(): String {
return this.mActionName
}
fun setActionName(actionName: String) {
this.mActionName = actionName
}
fun getId(): String {
return this.mId
}
fun setId(id: String) {
this.mId = id
}
fun addSingleCondition(condition: (Unit) -> Boolean) {
if(::mConditions.isInitialized) {
mConditions.add(condition)
} else {
mConditions = mutableListOf(condition)
}
}
fun addSingleAction(action: (Unit) -> Boolean) {
if(::mActions.isInitialized) {
mActions.add(action)
} else {
mActions = mutableListOf(action)
}
}
companion object {
fun serializeEventList(event: List<Event>): String {
return Gson().toJson(event) // ANR HERE!
}
fun deserializeEventList(jsonString: String): MutableList<Event> {
return Gson().fromJson(jsonString,
object : TypeToken<List<Event>>() {}.type)
}
}
}
Итак, я хочу, чтобы мой окончательный JSON, какописано выше, чтобы иметь тег действия и сериализованный список объектов событий.У меня проблема в том, что когда я пытаюсь сериализовать список, я получаю ANR.
Вот мой тестовый блок:
//TESTBLOCK
fun testEvent() {
//create test event
val event = Event()
event.setId("1")
event.setActionName("testtag")
event.addSingleCondition { testCondition1() }
event.addSingleCondition { testCondition2() }
event.addSingleAction { testAction1() }
event.addSingleAction { testAction2() }
val events = listOf(event)
//create test JSON
val jsonObject = JSONObject()
jsonObject.put("tagfield", "testtag")
val serializedObjectString = event.serializeEventList(events)
jsonObject.put("eventobjectfield", serializedObjectString)
}
, после чего я десериализирую поле Eventobject JSON, чтобы использоватьСнова объект события, но когда я пытаюсь сериализовать, я получаю ANR.
Я не уверен, что Gson не работает из-за лямбд, которые я добавил к объекту Event.Что я могу делать не так?