从文件加载时Json格式错误

时间:2018-12-14 06:33:20

标签: android json malformed

当我从资源中的.json文件加载一些模拟数据时,有时数据会返回损坏并显示��������������������符号。但是实际数据没有这些符号。我试图加载的代码根本不知道为什么会发生这种情况?谢谢

fun loadJSONFromAsset(fileName: String): String? {
        val json: String
        try {
            val `is` = javaClass.classLoader.getResourceAsStream(fileName)

            val size = `is`.available()
            val buffer = ByteArray(size)
            `is`.read(buffer)
            `is`.close()
            json = String(buffer, Charset.defaultCharset())
        } catch (ex: IOException) {
            ex.printStackTrace()
            return null
        }
        return json
    }

1 个答案:

答案 0 :(得分:2)

未单独压缩的文件在放入资产文件夹时将被压缩。您必须使用AssetManager

打开文件
val jsonString = context
    .assets
    .open("myfile.json")
    .bufferedReader()
    .readText()

或在构建时禁用.json文件的压缩。

android {
    aaptOptions {
       noCompress 'json'
    }
}

此外,我认为您没有充分的理由使用classLoader.getResourceAsStream(fileName)打开apk中捆绑的文件,在Android上您可以使用AssetManagerResources。我刚刚发现了这个interesting article,它表明使用getResourceAsStream也会非常慢。