I have a data class:
@Parcelize
data class Task(
var task: String,
var done: Boolean = false
) : Parcelable
and corresponding type converters for my Room database:
object Converters {
...
@TypeConverter
fun tasksToJson(list: List<Task>): String {
val objects = list.map { item ->
val jsonObject = JSONObject()
jsonObject.put("task", item.task)
jsonObject.put("done", item.done)
}
return JSONArray(objects).toString()
}
@TypeConverter
fun jsonToTasks(json: String): List<Task> {
val iterable = JSONArray(json).iterable<JSONObject>()
return iterable.map { jsonObject ->
Task(jsonObject.getString("task"), jsonObject.getBoolean("done"))
}
}
@Suppress("UNCHECKED_CAST")
private fun <T> JSONArray.iterable(): Iterable<T> {
return Iterable {
object : Iterator<T> {
var nextIndex = 0
override fun next(): T {
val element = get(nextIndex)
nextIndex++
return element as T
}
override fun hasNext(): Boolean {
return nextIndex < length()
}
}
}
}
}
Everything is fine, but I wanna extend my data class so that each Task would have a sub task. This is how I extend the data class:
@Parcelize
data class Task(
var task: String,
var done: Boolean = false,
var subTasks: List<Task> = emptyList() // -> sub tasks based on the same data class
) : Parcelable
So the question is now, if I need to extend the type converter for sub tasks too. If yes, how do I get it done? Thanks.