web-dev-qa-db-ja.com

型の不一致:推論された型は文字列ですが、kotlinではCharsetが予期されていました

私のメインアクティビティには次のコードがあります。

_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

}
_

コンパイルしようとすると、次のエラーが発生します。

Nullableが原因で発生した他のいくつかのエラーを修正しましたが、これは私がデコードできないものです。

エラー:(127、35)タイプの不一致:推定されたタイプはStringですが、Charsetが必要です

エラーに対応するために一部の値をnull可能に変更しましたが、json = String(buffer, "UTF-8")(UTF-8)には常に赤の下線が引かれています。

11
Kotlinboy

これで問題は解決したようです。

UTF-8のような文字列ではなく、Charsetタイプオブジェクトを指定する必要があるようです。

@MarošŠelengによる最初の方法

Charset.forName("UTF-8")

または、Charset.UTF_8を指定します

val charset: Charset = Charsets.UTF_8

json = String(buffer, charset)
27
Kotlinboy

Javadocによると、Stringコンストラクターは、タイプCharsetの2番目の引数を受け入れます ここに示すようにCharset.forName(String)静的メソッドを使用してCharsetを作成できます。

2
Maroš Šeleng