Kotlin 无法导入 JSON 文件,即使使用显式路径

Posted

技术标签:

【中文标题】Kotlin 无法导入 JSON 文件,即使使用显式路径【英文标题】:Kotlin can't import JSON file, even with explicit path 【发布时间】:2018-10-01 15:36:03 【问题描述】:

我正在尝试使用 Kotlin 和 android Studio 将本地 JSON 文件导入 Android 应用程序,但该应用程序似乎找不到该文件。即使使用显式路径,JVM 似乎也无法获取文件。我试过制作一个 .txt 文件,但 JVM 也找不到。 Klaxon 的教程不起作用,因为 Parser 类已被弃用;无论如何这都没关系,因为那不是错误所在。是的,该文件存在于目录中,并且是这样拼写的。

fun parse(name: String) : Any? 
    val inputStream: InputStream = File("C:\\Users\\Athena\\AndroidStudioProjects\\AD340HW1\\app\\zombie_movies.json").inputStream()
    val lineList = mutableListOf<String>()

    //val cls = Parser::class.java
    //inputStream.bufferedReader().useLines  lines -> lines.forEach lineList.add(it)   
    //val strArray = arrayOfNulls<String>(lineList.size)
    return lineList
 

java.lang.RuntimeException:无法启动活动 ComponentInfocom.example.athena.ad340hw1/com.example.athena.ad340hw1.ZombieMovies:java.io.FileNotFoundException:C:\Users\Athena\AndroidStudioProjects\AD340HW1 \app\zombie_movies.json(没有这样的文件或目录)

【问题讨论】:

Android 应用程序在 Android 设备(真实或虚拟)上运行,而路径指的是 Windows 系统(可能是您使用的开发系统)。 Android 应用无法访问此内容。 这是有道理的。关于如何将数据导入应用程序的任何建议?我宁愿不硬编码 20 部僵尸电影及其描述。 如果只是一个修复文件(或多个),从这里开始:***.com/questions/12037069/what-is-an-android-asset 老实说,rtfm。您知道如何向 Android 应用程序添加资源吗?有大量关于此的在线文档。 不回答的人倾向于这样做,因为他们不知道答案。我们为什么不一起阅读那些过时的文件? 【参考方案1】:

要使用文本文件或任何其他外部文件,您必须让 android 应用请求用户授予权限。那里有代码会弹出一个框,询问是否允许使用文件系统。这是一个帮助您入门的链接,我相信还有许多其他关于该主题的好教程。 https://developer.android.com/training/permissions/requesting.html

【讨论】:

【参考方案2】:

所以我最终所做的只是将 JSON 托管在服务器上,然后将其从服务器中提取出来。这最终比在我的本地机器上使用它更好,因为将来需要从远程设备访问数据。我想我的根本错误在于尝试太慢,太有条理。我应该刚刚启动我需要的服务器并完成它。

【讨论】:

以上是关于Kotlin 无法导入 JSON 文件,即使使用显式路径的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin NullPointer Exception Android [关闭]

无法解析 Kotlin Multiplatform 中的 cinterop IOS 导入

kotlin native 无法导入 khttp

MongoTypeConversionException:即使显式架构不包含 NullTypes,也无法使用 Mongo Spark 连接器将 STRING 转换为 NullType

无法导入 Kotlin 多平台通用的依赖项

Kotlin/Native 无法导入 io.ktor.network.selector.ActorSelectorManager