ClassNotFoundException: no se encontró la clase “android.os.PersistableBundle” Otto Android 5.0
android-5.0-lollipop (4)
Base en FAG
Algunas versiones de Android parecen tener un error de reflexión al llamar a GetDeclaredMethods o getMethods
en este caso, PersistableBundle
se agregó en el nivel 21 de API y cuando lo usamos en métodos de ciclo de vida como onCreate o onSaveInstanceState, este error ocurre.
Si utiliza alguno de los siguientes métodos en su código
@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);
}
Utilice los métodos de abajo en su lugar (o elimine los métodos de arriba si es inútil)
@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);
}
En mi caso uso este método en baseActivity e hice el crash
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
}
Simplemente sustituyo esto con
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
Y el problema resuelto.
Tengo un problema extraño. Tengo una aplicación que implementé en un dispositivo Android 4.4 y utilizo la biblioteca Otto. Desplegué la aplicación en un dispositivo Android 5.0. Aún funciona. Volví a intentar en el 4.4 y la aplicación no se lanzó.
Aparentemente, intenta usar PersistableBundle.class que es una clase de API 21. Aquí mi registro:
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)
Cambie targetVersion a la versión API del dispositivo que está ejecutando.
Tuve targetVersion = 21 cuando mi dispositivo tenía 4.4 (API 19), cambiando el valor a 19 resolví el problema.
Encuentro la "solución". Simplemente elimine esta función de su actividad:
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
Tuve un mismo problema en Samsung Galaxy 3mini y en los teléfonos de operadores locales. Pero lo solucioné con el método de anulación de actividad. Espero que funcione para usted.
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
try {
BusApplication.getInstance().register(this);
} catch (Exception e) {
e.printStackTrace();
}
}