Cómo (y dónde) fijar android.os.BadParcelableException: ClassNotFoundException cuando unmarshalling: RecyclerView $ SavedState?

He estado recibiendo por debajo de la excepción en la producción de AP de mi androide apk durante 1 día ahora:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ab/com.abcdHomeActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1654) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3695) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) at dalvik.system.NativeStart.main(Native Method) Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState at android.os.Parcel.readParcelable(Parcel.java:1958) at android.os.Parcel.readValue(Parcel.java:1846) at android.os.Parcel.readSparseArrayInternal(Parcel.java:2112) at android.os.Parcel.readSparseArray(Parcel.java:1568) at android.os.Parcel.readValue(Parcel.java:1903) at android.os.Parcel.readMapInternal(Parcel.java:2083) at android.os.Bundle.unparcel(Bundle.java:208) at android.os.Bundle.getSparseParcelableArray(Bundle.java:1167) at android.support.design.internal.NavigationMenuPresenter.onRestoreInstanceState(Unknown Source) at android.support.v7.view.menu.i.dispatchRestoreInstanceState(Unknown Source) at android.support.v7.view.menu.i.restorePresenterStates(Unknown Source) at android.support.design.widget.NavigationView.onRestoreInstanceState(Unknown Source) at android.view.View.dispatchRestoreInstanceState(View.java:6287) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1211) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215) at android.view.View.restoreHierarchyState(View.java:6266) at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1506) at android.app.Activity.onRestoreInstanceState(Activity.java:847) at android.app.Activity.performRestoreInstanceState(Activity.java:819) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1632) ... 11 more 

Todos los informes de fallos anteriores son de Android 2.3.3 – versiones 2.3.7. No estoy seguro de lo que está causando esto.

He buscado otros puestos similares, pero las respuestas fueron alrededor de un objeto personalizado que implementa parcelable que no implementar en mi aplicación.

Estoy usando la última versión de la biblioteca de soporte de android y servicios de reproducción en mi aplicación como se muestra a continuación:

 compile 'com.android.support:cardview-v7:23.1.1' compile 'com.android.support:design:23.1.1' compile 'com.google.android.gms:play-services-analytics:8.4.0' compile 'com.google.android.gms:play-services-ads:8.4.0' compile 'com.google.android.gms:play-services-appinvite:8.4.0' compile 'com.google.android.gms:play-services-plus:8.4.0' 

Aquí está el código (que me siento relevante, si no, por favor, hágamelo saber qué más se necesita) de la actividad que está fallando:

 private void initNavigationMenu() { mNavigationView = (NavigationView) findViewById(R.id.nav_view); mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { return onNavItemSelected(menuItem); } }); Menu menu = mNavigationView.getMenu(); MenuItem menuItem = menu.findItem(R.id.action_tutorial); IconDrawable iconDrawable = new IconDrawable(this, MaterialIcons.md_ondemand_video) .colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_settings); iconDrawable = new IconDrawable(this, MaterialIcons.md_settings).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_images_all); iconDrawable = new IconDrawable(this, EntypoIcons.entypo_images).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_images_screenshots); iconDrawable = new IconDrawable(this, MaterialIcons.md_camera).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_favorites); iconDrawable = new IconDrawable(this, MaterialIcons.md_favorite).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_translate); iconDrawable = new IconDrawable(this, MaterialIcons.md_translate).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_feedback); iconDrawable = new IconDrawable(this, MaterialIcons.md_feedback).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_rate); iconDrawable = new IconDrawable(this, MaterialIcons.md_rate_review).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_invite); iconDrawable = new IconDrawable(this, MaterialIcons.md_insert_invitation).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_facebook); iconDrawable = new IconDrawable(this, FontAwesomeIcons.fa_facebook).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_twitter); iconDrawable = new IconDrawable(this, FontAwesomeIcons.fa_twitter).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_google_plus); iconDrawable = new IconDrawable(this, FontAwesomeIcons.fa_google_plus).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem = menu.findItem(R.id.action_remove_ads); iconDrawable = new IconDrawable(this, MaterialIcons.md_attach_money).colorRes(R.color.black); menuItem.setIcon(iconDrawable); menuItem.setVisible(!BuildConfig.IS_PRO); setHeaderView(); } private void setHeaderView() { boolean initializePlusOneButton = false; GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); int code = googleApiAvailability.isGooglePlayServicesAvailable(this); if (code == ConnectionResult.SUCCESS) { initializePlusOneButton = true; } else if (googleApiAvailability.isUserResolvableError(code)) { googleApiAvailability.showErrorDialogFragment(this, code, REQ_CODE_GOOGLE_API_ERROR); } View headerView = LayoutInflater.from(this).inflate( initializePlusOneButton ? R.layout.activity_home_drawer_header : R.layout.activity_home_drawer_header_wo_plus_button, null); if (initializePlusOneButton) { mPlusOneButton = (PlusOneButton) headerView.findViewById(R.id.plus_one_button); } mNavigationView.addHeaderView(headerView); gLogger.debug(String.format( "setHeaderView(): initialize plusOneButton=%s", initializePlusOneButton )); } 

Contenido de R.layout.activity_home_drawer_layout.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="150dp" android:background="?attr/colorPrimary" android:orientation="vertical"> <com.andexert.library.RippleView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="bottom" android:padding="10dp" app:rv_rippleDuration="300" app:rv_type="rectangle"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <com.joanzapata.iconify.widget.IconTextView android:layout_width="60dp" android:layout_height="match_parent" android:layout_above="@+id/app_name" android:layout_gravity="center_vertical" android:gravity="center" android:text="{md-camera}" android:textColor="@color/white" android:textSize="50sp" /> <LinearLayout android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="10dp" android:layout_marginTop="5dp" android:text="@string/app_name" android:textColor="@color/white" android:textSize="16sp" android:textStyle="italic|bold" /> <com.google.android.gms.plus.PlusOneButton xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus" android:id="@+id/plus_one_button" android:layout_width="wrap_content" android:layout_height="wrap_content" plus:annotation="bubble" plus:size="medium" /> </LinearLayout> </LinearLayout> </com.andexert.library.RippleView> </LinearLayout> 

Contenido de R.layout.activity_home_drawer_header_wo_plus_button.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="150dp" android:background="?attr/colorPrimary" android:orientation="vertical"> <com.andexert.library.RippleView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="bottom" android:padding="10dp" app:rv_rippleDuration="300" app:rv_type="rectangle"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.joanzapata.iconify.widget.IconTextView android:layout_width="wrap_content" android:padding="10dp" android:layout_above="@+id/app_name" android:layout_weight="1" android:layout_gravity="center" android:gravity="center" android:layout_height="0dip" android:text="{md-camera}" android:textColor="@color/white" android:textSize="80sp" /> <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:text="@string/app_name" android:textColor="@color/white" android:textSize="18sp" android:textStyle="italic|bold" /> </LinearLayout> </com.andexert.library.RippleView> </LinearLayout> 

Se ha abierto un ticket en bugs.google.com y para API 11+ se ha corregido en la biblioteca de asistencia 24.0.0 . Para API <= 10 se fijará en una versión futura.

Sea cual sea la View da error, use android:saveEnabled="false" en la declaración xml de esa vista o yourView.setSaveEnabled(false) programación. De esta manera se evita guardar el estado de esa vista (cuando se cancela el proceso de aplicación) y no se bloquea en el momento de la restauración.

  • Android RecyclerView último elemento eliminar (tiempo de ejecución) error
  • ¿Cómo puedo eliminar OnClickListeners de ViewHolders de RecyclerView cuando se eliminan?
  • Añadir elementos a Endless Scroll RecyclerView con ProgressBar en la parte inferior
  • AppBarLayout, NestedScrollView, FrameLayout, ¿cuál es el trato?
  • Desplazamiento horizontal y vertical en la vista del reciclador android
  • Cómo poner RecyclerView dentro de NestedScrollView?
  • Comportamiento parecido a un buscador en RecyclerView
  • Escaneando con múltiples RecyclerViews en Layout
  • RecyclerView corrompe la vista usando notifyItemMoved ()
  • Android - RecyclerView espaciado entre elementos en una cuadrícula
  • Desactivar Desplazamiento en el niño de Recyclerview android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.