首页 > 解决方案 > 从 Kotlin 对象列表创建 JSONObjects 集合

问题描述

我有一个房间数据库,我可以从中获取 a List<LearningEvent>,然后我必须将其转换为 aCollection<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;
        }

标签: jsonkotlinandroid-room

解决方案


在我看来,您可以使用.toJson. 这里是示例代码:

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

推荐阅读