android - Android Volley Kotlin: (Mutable)Map<(raw) Any?, (raw) Any?>! 与 MutableMap
问题描述
在带有 Kotlin 和 Volley 库的 Android 中,我使用以下代码将地图放入 jsonObject。
val params = mutableMapOf<String, String>()
params["key1"] = "value1"
params["key2"] = "value2"
val parameter = JSONObject(params)
这给了我以下错误:
Java type mismatch expected (Mutable)Map<(raw) Any?, (raw) Any?>! but found MutableMap<String, String>. Use explicit cast
- 为什么我需要显式转换为
params as Map<*, *>
- 什么是(可变)映射?
- (Mutable)Map 和 MutableMap 有什么区别?
解决方案
构造JSONObject
函数采用Map
原始类型(未指定泛型)。因此,您应该提供一个可以是Any
类型的地图:
val params = mutableMapOf<Any?, Any?>()
params["key1"] = "value1"
params["key2"] = "value2"
val parameter = JSONObject(params)
警告(Mutable)Map<(raw) Any?, (raw) Any?>
显示 Java 参数参数 - 说明它可以期待 aMap
或MutableMap
,因为您正在从 Kotlin 调用 Java 代码 - Java 不知道Map
是可变的还是不可变的。请注意,Kotlin 不支持原始类型,只有在调用 Java 代码时才会遇到此问题。
推荐阅读
- java - 更改存储在不同线程上的列表中的对象的字段
- c# - 如何在 ConfigureServices 中创建依赖于数据库上下文的实例
- google-cloud-platform - 谷歌文档人工智能
- python - python的VSCode自动完成字符串参数
- python - 无法使用 python selenium 单击电子邮件验证按钮
- android - android.util.AndroidRuntimeException:从 Activity 标志外调用 startActivity()
- python - 用最少的文档在 escpos-python 上打印繁体中文字符
- vue.js - 如何在本地存储中从具有纪元时间的项目列表中呈现格式化的日期时间
- powershell - Win10 - 如何将一个命令的输出作为另一个命令的参数来检查文件哈希?
- angular - angular useFactory在模块中返回异步函数