从Kotlin多平台模块共享资源(JSON、图像、文本.)

qcuzuvrc  于 2023-11-21  发布在  Kotlin
关注(0)|答案(1)|浏览(138)

一个我认为很简单的任务变得有点复杂。我在Kotlin多平台模块中有一个.json文件,我想在iOS和Android之间共享它。我的第一个天真的方法是将它添加到commonMain内的一个文件夹中。(从两个平台访问文件的结果都是“null”,但我甚至不确定资源是否与模块捆绑在一起)。然后我检查了这些指令:https://luisramos.dev/how-to-share-resources-kmm,也不起作用。我知道这个库:https://github.com/icerockdev/moko-resources但我不想包括一个库只是为了共享一个文件。
有没有一种简单的方法可以在多平台模块中说“包含此文件夹及其所有文件”,并使其对所有平台都可访问?(请注意,文件可以与平台相关,但文件应该位于一个位置)

yhuiod9q

yhuiod9q1#

我有一个类似的问题要解决,我找到了这个解决方案:我把我的json文件data.json放在文件夹/composeApp/src/commonMain/resources/中。然后我简单地使用这个存储库访问文件(在commonMain中):

class MyDataRepository {

    @OptIn(ExperimentalResourceApi::class)
    suspend fun getData(): List<MyData>? {
        return try {
            val jsonString = resource(DATA_FILE_NAME).readBytes().decodeToString()
            Json.decodeFromString<List<MyData>>(jsonString)
        } catch (e: Exception) {
            // Handle parsing error
            null
        }
    }

    companion object {
        private const val DATA_FILE_NAME = "data.json"
    }

}

字符串
正如你所注意到的,函数resource()还处于实验阶段,但它对我来说工作得很好。

相关问题