android 无此类方法错误:没有接口方法getOrDefault(Ljava/lang/Object;语言/语言/对象;)语言/语言/对象;在类Ljava/util/Map中;

xienkqul  于 2022-12-16  发布在  Android
关注(0)|答案(3)|浏览(303)

我已经得到了与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)

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

kxkpmulp

kxkpmulp1#

**getOrDefault**方法是在API级别24中添加的,而API级别24以下的运行时没有该方法。这就是为什么它在Android API级别21中不起作用的原因。

官方链接

piah890a

piah890a2#

特别是这个函数,你可以这样做:

//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:\用户\您的用户名\应用数据\本地\安卓\Sdk\源代码\安卓-29\java\util\Map.java中有源代码:

...
    default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
    }
    ...
gudnpqoy

gudnpqoy3#

你可以用getOrElse来代替,它接受第二个参数作为lambda,例如:

dataItems.getOrElse(id) { null }

相关问题