2017-03-22 7 views
0

Ich habe denselben Code:NoClassDefFoundError auf dem Gerät

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(); 

In Emulator android ich nicht Fehler NoClassDefFoundError fangen. Aber in meinem Gerät dieses Android 5.1 erhalte ich diesen Fehler.

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 
    } 

Meine build.gradle Datei. Das kann falsch sein?

Antwort

1

Es wäre hilfreicher, Sie könnten auch die Fehlerprotokolle teilen.

bearbeitet haben Sie Ihre Manifest-Datei android zu setzen: in der Tag-Namen wie folgt:

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

Oder wenn Sie die Anwendungsklasse außer Kraft setzen, es MultiDexApplication

Schauen Sie sich diese verlängern ändern Link für weitere Informationen: developer.android.com/studio/build/multidex.html

+0

java.lang.NoClassDefFoundError: ca.amikash.cashback.ViewModelProvider $$ Lambda 1 $ nur dieser Fehler. extend MultiDexApplication - hat mir nicht geholfen –

+1

Verwenden Sie ein Bibliotheksprojekt mit einer Klasse ca.amikash.cashback.ViewModelProvider? –

+0

In der Klasse TheApplication erweitert MultiDexApplication ich benutze ViewModelProvider.clearCacheWithoutMainActivity(); –

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(); 
      } 
     } 

Statt

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

das Problem gelöst. Aber immer noch nicht verstanden, warum der Ausschluss hinausgeworfen wurde. Und der Code ohne Lambdas ist nicht schön, aber was zu tun ist.

Verwandte Themen