tyczj
tyczj

Reputation: 73753

Overload resolution ambiguity HashMap.get kotlin

I just updated the Android Q SDK to revision 2 in android studio and now I get an error with getting values from a hashmap

enter image description here

it is HashMap<String,String> and this code was fine until I did the update in android studio to Q revision 2.

This is where my HashMap comes from

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

I found a question similar to this but non-android related and its a few years old

Anyone know what the issue is or how to fix it?

Edit:

Seems like it also broke ArrayLists too as calling .contains or .remove on a collection also throws an ambiguity error.

it looks like there are duplicate methods for all of these

Edit 2:

Looks like I am not the only person with this issue

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

Upvotes: 10

Views: 1248

Answers (4)

tyczj
tyczj

Reputation: 73753

As per the bug report in the issue tracker, google has reverted r2 back to r1

API 29 r2 has been rolled back from Studio SDK Manager for now until the root cause is identified and fixed.

So just uninstall/reinstall Q from the adk manager and you should be back on r1

Upvotes: 2

James Wald
James Wald

Reputation: 13734

It was a bug with the latest Android SDK 29 release until Google rolled back the update. See https://issuetracker.google.com/issues/139041608.

If you were unfortunate enough to install platforms;android-29 revision 2 before they rolled it back, you'll have to downgrade back to revision 1. You can do this by first uninstalling the package using the $ANDROID_HOME/tools/bin/sdkmanager tool.

sdkmanager --uninstall "platforms;android-29"

Then remove revision 2 from the cache by removing the "platforms;android-29" element containing <major>2</major> from $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>

Keep the other "platforms;android-29" element with <major>1</major> and then re-install the package:

sdkmanager --install "platforms;android-29"

Upvotes: 7

Justin Dunscombe
Justin Dunscombe

Reputation: 31

I ran into the same problem and found a workaround for HashMap and ArrayList: You can instantiate the map as

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

For ArrayList

val list: MutableList<String> = ArrayList()

Upvotes: 3

Shane Thompson
Shane Thompson

Reputation: 1

I ran into the same problem, For now as a workaround I am using the Kotlin extension function getOrElse, which allows you to provide a default value if the map does not contain the given key.

Upvotes: -1

Related Questions