NoSuchMethodError: No interface method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Ljava/util/Map;
NoSuchMethodError: No interface method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Ljava/util/Map;
我在 Android 5.0 的魅族设备上崩溃了。大多数设备上不会出现此崩溃。
错误是:java.lang.NoSuchMethodError: No interface method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Ljava/util/Map; or its super classes (declaration of 'java.util.Map' appears in /system/framework/core-libart.jar)
有人遇到过类似的事情吗?
getOrDefault
方法已添加到 API 级别 24,API 级别 24 以下的运行时没有该方法。这就是为什么它在 Android API 级别 21 中不起作用的原因。
特别是这个函数你可以这样做:
//ask your app running more modern API as level 24 (Build.VERSION_CODES.N(ougat))
result = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) ?
map.getOrDefault(value, default) :
// if not, then need to solve with similar code of original code in next below
((map.get(value) != null) ? map.get(value) : default);
原版中有源码
c:\Users\Your_username\AppData\Local\Android\Sdk\sources\android-29\java\util\Map.java:
...
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
...
我在 Android 5.0 的魅族设备上崩溃了。大多数设备上不会出现此崩溃。
错误是:java.lang.NoSuchMethodError: No interface method getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Ljava/util/Map; or its super classes (declaration of 'java.util.Map' appears in /system/framework/core-libart.jar)
有人遇到过类似的事情吗?
getOrDefault
方法已添加到 API 级别 24,API 级别 24 以下的运行时没有该方法。这就是为什么它在 Android API 级别 21 中不起作用的原因。
特别是这个函数你可以这样做:
//ask your app running more modern API as level 24 (Build.VERSION_CODES.N(ougat))
result = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) ?
map.getOrDefault(value, default) :
// if not, then need to solve with similar code of original code in next below
((map.get(value) != null) ? map.get(value) : default);
原版中有源码 c:\Users\Your_username\AppData\Local\Android\Sdk\sources\android-29\java\util\Map.java:
...
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
...