【问题标题】:Type mismatch: inferred type is String but Charset was expected in kotlin类型不匹配:推断的类型是 String 但在 kotlin 中需要 Charset
【发布时间】:2018-04-22 06:04:03
【问题描述】:

我的主要活动中有以下代码:

var qNa_list = parseQuestions(loadJSONFromAsset("qna_list.json"))


fun loadJSONFromAsset(file_name:String): String? {
    var json: String? = null
    try {

        val isis = assets.open(file_name)

        val size = isis.available()

        val buffer = ByteArray(size)

        isis.read(buffer)

        isis.close()

        json = String(buffer, "UTF-8")


    } catch (ex: IOException) {
        ex.printStackTrace()
        return null
    }

    return json

}

当我尝试编译它时,我收到以下错误。

我修复了一些其他由 nullables 引起的错误,但这个是我无法解码的。

错误:(127, 35) 类型不匹配:推断类型为 String 但预期为 Charset

我已将一些值更改为可为空以适应错误,但 json = String(buffer, "UTF-8") (UTF-8) 始终带有红色下划线。

【问题讨论】:

  • 在java中你可以直接使用byteArray.toString(),我不知道kotlin是否允许这样。
  • @Manojkumar 我认为你弄错了。最终结果必须是 Charset 对象。不是一个字符。但是像“UTF-8”这样的字符集

标签: android json string kotlin


【解决方案1】:

这似乎解决了问题。

看来我需要指定Charset 类型的对象,而不是像UTF-8 这样的字符串。

@Maroš Šeleng 提到的第一种方法

Charset.forName("UTF-8")

或者,指定Charset.UTF_8

val charset: Charset = Charsets.UTF_8

json = String(buffer, charset)

【讨论】:

    【解决方案2】:

    根据 javadoc,String 构造函数接受 Charset as seen here 类型的第二个参数。您可以使用Charset.forName(String) 静态方法来创建您的Charset

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-23
      • 2018-10-08
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多