18

Ich habe ein seltsames Problem. Ich habe eine App, die ich auf einem Android 4.4-Gerät bereitgestellt und Otto-Bibliothek verwenden. Ich habe die App auf einem Android 5.0-Gerät bereitgestellt. Es funktioniert noch. Ich habe auf der 4.4 versucht und die App wird nicht gestartet.ClassNotFoundException: Nicht gefunden Klasse "android.os.PersistableBundle" Otto Android 5.0

Offenbar versucht es PersistableBundle.class, die eine API 21-Klasse verwenden. Hier mein Logbuch:

Caused by: java.lang.ClassNotFoundException: Didn't find class "android.os.PersistableBundle" on path: DexPathList[[zip file "/data/app/fr.myapp.apk"],nativeLibraryDirectories=[/data/app-lib/fr.myapp, /vendor/lib, /system/lib]] 
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
            at java.lang.Class.getDeclaredMethods(Native Method) 
            at java.lang.Class.getDeclaredMethods(Class.java:656) 
            at com.squareup.otto.AnnotatedHandlerFinder.loadAnnotatedMethods(AnnotatedHandlerFinder.java:52) 
            at com.squareup.otto.AnnotatedHandlerFinder.findAllProducers(AnnotatedHandlerFinder.java:126) 
            at com.squareup.otto.HandlerFinder$1.findAllProducers(HandlerFinder.java:33) 
            at com.squareup.otto.Bus.register(Bus.java:191) 
+0

Ich bin nicht sicher, ob Sie derjenige, der auf die Frage kommentiert sind, aber es ist [eine noch offene Frage zu diesem Thema] (https://github.com/square/otto/issues/139). – CommonsWare

+0

Ja, ich bin es. Ich habe gerade die folgende Lösung gefunden. – Cocorico

+0

Aktualisierung Android OS zu 5.0 löste das Problem für mich –

Antwort

28

Ich finde die "Lösung". Gerade diese Funktion von Ihrer Aktivität entfernen:

@Override 
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 
    super.onSaveInstanceState(outState, outPersistentState); 
} 
+0

Entfernen Sie es von was? – CommonsWare

+0

Ich habe meine Antwort bearbeitet. Hoffe, es hilft – Cocorico

+4

Hmmm ... während das wahrscheinlich funktioniert, das ist wirklich ein Workaround mehr als eine "Lösung". Entwickler möchten diese Methode möglicherweise auf Geräten mit Android 5.0 und höher verwenden. Das Überschreiben einer Methode, die von einer älteren API-Ebene nicht normal aufgerufen wird, ist kein Problem. Da Otto über Methoden iteriert, sollte eine Ausnahmebehandlung vorhanden sein, um mit diesem Szenario fertig zu werden, IMHO. – CommonsWare

0

ändern targetVersion an die API-Version des Geräts Sie ausgeführt werden.

Ich hatte targetVersion = 21 wenn mein Gerät hatte 4.4 (API 19), änderte den Wert auf 19 das Problem gelöst.

0

Ich hatte ein gleiches Problem auf Samsung Galaxy 3mini und Local Operator phones.Aber ich mit Override-Aktivität Methode behoben.Ich hoffe, es funktioniert für Sie.

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    try { 
     BusApplication.getInstance().register(this); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Verwandte Themen