Создать коллекцию JSONObjects из списка Kotlin объектов - PullRequest
0 голосов
/ 06 августа 2020

У меня есть база данных комнат, из которой я могу получить List<LearningEvent>, который затем мне нужно преобразовать в Collection<JSONObject> и вернуть. Как я могу это сделать эффективно?

Вот LearningEvent класс:

@Entity(tableName = "learningEvents")
data class LearningEvent(
    @ColumnInfo(name = "learningeventid")
    @PrimaryKey(autoGenerate = true)
    var id: Int? = null,
    var sessionId: Long,
    var time: Float,
    var eventType: String,
    var description: String,
    var feedback: String
)

Вот DAO:

@Query("SELECT * FROM learningEvents WHERE sessionId = :sessionId")
suspend fun getAllLearningEvents(sessionId: Long?): List<LearningEvent>

А вот мои неработающие / нерабочие -создание кода для функции getEvents ():

 override suspend fun getEvents(): Collection<JSONObject> =
        withContext(Dispatchers.IO) {
            Log.d("\ngetEvents(eventType)", currentSessionId.toString())
            if (currentSessionId === null) {
                throw Exception("Current session Id is null; Session cannot be retrieved.")
            }

            var gson = Gson();

            // Return JSON object collection of table rows.
            var learningEvents = db.learningEventDao().getAllLearningEvents(currentSessionId);
            var returnCollection = emptyList<JSONObject>();
            learningEvents.forEach{element ->
                var singleObject = gson.toJsonTree(element);
                returnCollection += singleObject;
            }

            return@withContext returnCollection;
        }

1 Ответ

1 голос
/ 07 августа 2020

По моему скромному мнению, вы можете преобразовать LearningEvent в JSONObject, используя .toJson. Вот пример кода:

var learningEvents = db.learningEventDao().getAllLearningEvents(currentSessionId);
var returnCollection = emptyList<JSONObject>();
learningEvents.forEach{ element ->
      val singleObject = gson.toJson(element);
      returnCollection += JSONObject(singleObject);
}
...