【问题标题】:Kotlin can't import JSON file, even with explicit pathKotlin 无法导入 JSON 文件,即使使用显式路径
【发布时间】: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:无法启动活动 ComponentInfo{com.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 部僵尸电影及其描述。
  • 如果只是一个修复文件(或多个),从这里开始:stackoverflow.com/questions/12037069/what-is-an-android-asset
  • 老实说,rtfm。您知道如何向 Android 应用程序添加资源吗?有大量关于此的在线文档。
  • 不回答的人倾向于这样做,因为他们不知道答案。我们为什么不一起阅读那些过时的文件?

标签: kotlin jvm filenotfoundexception runtimeexception klaxon


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-06-19
      • 2020-11-28
      • 2013-09-20
      • 2021-07-09
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多