我有相同的代码:
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文件。那可能是错的?
答案 0 :(得分:1)
您也可以分享错误日志更有帮助。
您是否已编辑清单文件以在标记中设置android:name,如下所示:
<application android:name="android.support.multidex.MultiDexApplication">
或者如果您覆盖Application类,请将其更改为扩展 MultiDexApplication
答案 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的代码并不漂亮,但该怎么做。