类型不匹配:推断的类型是 String 但在 kotlin 中需要 Charset
Posted
技术标签:
【中文标题】类型不匹配:推断的类型是 String 但在 kotlin 中需要 Charset【英文标题】:Type mismatch: inferred type is String but Charset was expected in kotlin 【发布时间】: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”这样的字符集
【参考方案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
。
【讨论】:
以上是关于类型不匹配:推断的类型是 String 但在 kotlin 中需要 Charset的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin:类型不匹配:推断类型是 Intent?但意图是预期的
获取类型不匹配:推断类型为 List 但应为 Collection