NoSuchMethodError:没有接口方法getOrDefault(Ljava / lang / Object; Ljava / lang / Object;)Ljava / lang / Object;在Ljava / util / Map类中;

时间:2019-10-16 08:22:07

标签: android kotlin android-databinding android-livedata

我在装有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)

enter image description here

有人经历过类似的事情吗?

2 个答案:

答案 0 :(得分:5)

getOrDefault 方法已添加到API级别24中,而低于API级别24的运行时没有该方法。这就是为什么它无法在Android API级别21中工作的原因。

答案 1 :(得分:0)

特别是这个功能你可以这样做:

    //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;
    }
    ...