重载分辨率歧义HashMap.get Kotlin

时间:2019-08-07 18:45:17

标签: android android-studio kotlin

我刚刚在android studio中将Android Q SDK更新到了修订版2,现在在从哈希图中获取值时出现错误

enter image description here

itHashMap<String,String>,在我在android studio中将其更新为Q版本2之前,这段代码是好的。

这是我的HashMap的来源

val map = HashMap<String,String>()
map["owner"] = shipment.owner
map["current"] = signedInUser
shipmentOwnedLiveData.postValue(map)

我发现了一个与this类似的问题,但与Android无关,并且已有几年历史了。

任何人都知道问题是什么或如何解决?

编辑:

似乎它也破坏了ArrayList,因为在集合上调用.contains.remove也会引发歧义错误。

所有这些似乎都有重复的方法

编辑2:

看起来我不是唯一遇到此问题的人

https://issuetracker.google.com/issues/139041608#comment3

4 个答案:

答案 0 :(得分:7)

这是最新的Android SDK 29版本中的一个错误,直到Google撤消了更新。参见https://issuetracker.google.com/issues/139041608

如果很不幸无法安装 <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> ... </pluginExecutionFilter> </pluginExecution> <pluginExecution> <pluginExecutionFilter> ... 版本2,则必须降级到版本1。您可以先使用platforms;android-29卸载软件包工具。

$ANDROID_HOME/tools/bin/sdkmanager

然后通过从sdkmanager --uninstall "platforms;android-29" 中删除包含"platforms;android-29"的{​​{1}}元素来从缓存中删除修订版2:

<major>2</major>

将其他$HOME/.android/cache/sdkbin-1_b735609c-repository2-1_xml元素保留为<remotePackage path="platforms;android-29"> <!--Generated from bid:5747142, branch:qt-release--> <type-details xsi:type="sdk:platformDetailsType"> <api-level>29</api-level> <codename></codename> <layoutlib api="15"/> </type-details> <revision> <major>2</major> </revision> <display-name>Android SDK Platform 29</display-name> <uses-license ref="android-sdk-license"/> <channelRef ref="channel-0"/> <archives> <archive> <!--Built on: Tue Jul 23 11:56:59 2019.--> <complete> <size>78259143</size> <checksum>c8b1361cc03309a8113de92f93471524fa0c36f7</checksum> <url>platform-29_r02.zip</url> </complete> </archive> </archives> </remotePackage> ,然后重新安装软件包:

"platforms;android-29"

答案 1 :(得分:3)

我遇到了同样的问题,找到了HashMap和ArrayList的解决方法: 您可以将地图实例化为

val map: MutableMap<String, String> = HashMap()

对于ArrayList

val list: MutableList<String> = ArrayList()

答案 2 :(得分:2)

根据问题跟踪器中的bug report,Google已将r2恢复为r1

  

API 29 r2已从Studio SDK Manager暂时回滚,直到   找出根本原因并加以解决。

因此,只需从adk管理器中卸载/重新安装Q,您就应该回到r1

答案 3 :(得分:-1)

我遇到了同样的问题,目前,作为一种解决方法,我使用的是Kotlin扩展函数getOrElse,如果地图不包含给定的键,它可以为您提供默认值。