设备上的noclassdeffounderror

时间:2017-03-22 07:22:07

标签: java android devise try-catch

我有相同的代码:

public static void clearCacheWithoutMainActivity()
{
    try
    {
        viewModelForClass.entrySet().removeIf(e -> !e.getKey().equals(className));
    }
    catch(NoClassDefFoundError e)
    {
        int k = 0;
    }
}

private static Map<String, Pair<BaseObservable, Date>> viewModelForClass = new LinkedHashMap<>();

private static final String className = MainActivity.class.getName();

在模拟器android中我没有发现错误NoClassDefFoundError。但在我的设备这个Android 5.1我发现这个错误。

    compileSdkVersion 25
    buildToolsVersion "25.0.2"

  defaultConfig {
        applicationId "ca.amikash.cashback"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    dexOptions {
        preDexLibraries = false
        jumboMode = false
        maxProcessCount 4
        javaMaxHeapSize "6g"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

我的build.gradle文件。那可能是错的?

2 个答案:

答案 0 :(得分:1)

您也可以分享错误日志更有帮助。

您是否已编辑清单文件以在标记中设置android:name,如下所示:

<application android:name="android.support.multidex.MultiDexApplication">

或者如果您覆盖Application类,请将其更改为扩展 MultiDexApplication

点击此链接了解详情:developer.android.com/studio/build/multidex.html

答案 1 :(得分:0)

for(Iterator<Map.Entry<String, Pair<BaseObservable, Date>>> it = viewModelForClass.entrySet().iterator(); it.hasNext(); ) {
            Map.Entry<String, Pair<BaseObservable, Date>> entry = it.next();
            if(!entry.getKey().equals(className)) {
                it.remove();
            }
        }

相反

   viewModelForClass.entrySet().removeIf(e -> !e.getKey().equals(className));

解决了这个问题。但仍然不明白为什么排除被抛弃了。没有lambdas的代码并不漂亮,但该怎么做。