web-dev-qa-db-fra.com

ClassNotFoundException: impossible de trouver la classe "Android.os.PersistableBundle" Otto Android 5.0

J'ai un problème étrange ... J'ai une application que j'ai déployée sur un appareil Android 4.4 et j'utilise la bibliothèque Otto ..__ J'ai déployé l'application sur un appareil Android 5.0 Cela fonctionne toujours . J'ai retenté sur le 4.4 et l'application ne sera pas lancée.

Apparemment, il essaie d'utiliser PersistableBundle.class qui est une classe d'API 21 . Voici mon journal:

    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)
18
Cocorico

Je trouve la "solution". Supprimez simplement cette fonction de votre activité: 

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

J'ai eu un même problème sur Samsung Galaxy 3mini et les téléphones de l'opérateur local.

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

Base sur PÉDÉ

Certaines versions d'Android semblent avoir un problème de réflexion lors de l'appel de getDeclaredMethods ou de getMethods.

dans ce cas, PersistableBundle a été ajouté dans l'API niveau 21 et lorsque nous l'utilisons dans des méthodes de cycle de vie telles que onCreate ou onSaveInstanceState, cette erreur se produit.

Si vous utilisez l'une des méthodes ci-dessous dans votre code

@Override
public void onCreate(Bundle savedInstanceState,PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
}

@Override
public void onPostCreate(Bundle savedInstanceState,PersistableBundle persistentState) {
    super.onPostCreate(savedInstanceState, persistentState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onRestoreInstanceState(savedInstanceState, persistentState);
}

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

Utilisez les méthodes ci-dessous à la place (ou supprimez les méthodes ci-dessus si cela ne sert à rien)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
} 

Dans mon cas, j'utilise cette méthode dans baseActivity et j'ai provoqué le crash.

override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState) 
}

Simplement je remplace ceci par 

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

Et problème résolu.

0
Radesh

Changez targetVersion en la version API du périphérique que vous utilisez.

J'avais targetVersion = 21 quand mon appareil avait 4.4 (API 19), changer la valeur à 19 a résolu le problème.

0
htafoya