多模块Android项目数据文件放置位置及读取方案咨询
问题解决:Android多模块项目中资源文件读取失败
问题原因
测试阶段能读取到proverbs.json是因为JVM测试环境会将resources目录下的文件输出到本地文件系统,通过ClassLoader.getResource().path可以拿到真实文件路径;但Android应用打包后,resources目录下的文件会被打包进APK,并非独立的文件系统文件,此时通过File类读取必然抛出FileNotFoundException。
解决方案
不需要移动文件位置(保持在general模块的src/main/resources目录即可),只需要修改资源读取方式,改用输入流读取:
修改getJsonResponse函数为:
private fun getJsonResponse(filepath: String): String { return javaClass.classLoader?.getResourceAsStream(filepath)?.use { inputStream -> inputStream.bufferedReader().readText() } ?: "" }
补充方案(若需依赖Android Asset系统)
如果你的general模块是Android Library,也可以将proverbs.json放到模块的src/main/assets目录下,通过Context的assets.open()方法读取,但这种方式需要Repository持有Context,会增加耦合度,不如第一种方案通用。
内容的提问来源于stack exchange,提问作者KvdLingen
相关产品推荐
相关产品推荐

