16

sto vedendo il seguente errore nei miei rapporti di crash Android:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.Toolbar$SavedState 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3974) 
    at android.app.ActivityThread.access$900(ActivityThread.java:139) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1299) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:149) 
    at android.app.ActivityThread.main(ActivityThread.java:5257) 
    at java.lang.reflect.Method.invokeNative(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
    at dalvik.system.NativeStart.main(NativeStart.java) 
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.Toolbar$SavedState 
    at android.os.Parcel.readParcelableCreator(Parcel.java:2154) 
    at android.os.Parcel.readParcelable(Parcel.java:2104) 
    at android.os.Parcel.readValue(Parcel.java:2020) 
    at android.os.Parcel.readSparseArrayInternal(Parcel.java:2382) 
    at android.os.Parcel.readSparseArray(Parcel.java:1742) 
    at android.os.Parcel.readValue(Parcel.java:2077) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2321) 
    at android.os.Bundle.unparcel(Bundle.java:249) 
    at android.os.Bundle.getSparseParcelableArray(Bundle.java:1273) 
    at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1744) 
    at android.app.Activity.onRestoreInstanceState(Activity.java:1017) 
    at android.app.Activity.performRestoreInstanceState(Activity.java:989) 
    at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1138) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 
    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3974) 
    at android.app.ActivityThread.access$900(ActivityThread.java:139) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1299) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:149) 
    at android.app.ActivityThread.main(ActivityThread.java:5257) 
    at java.lang.reflect.Method.invokeNative(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
    at dalvik.system.NativeStart.main(NativeStart.java) 

Sembra accadere in modo intermittente quando si riprende un'attività. Non accedo direttamente alla classe SavedState in alcun codice.

EDIT: Xml Layout per la mia attività è

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/white" 
android:orientation="vertical"> 

<include layout="@layout/toolbar" /> 
.... 

E XML barra degli strumenti è

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/toolbar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="?attr/colorPrimary" 
android:minHeight="?attr/actionBarSize" 
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

E nella mia onCreate di attività che faccio

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

    setContentView(R.layout.activity_show_txn); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    localBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext()); 
    mResources = getResources(); 

    if (savedInstanceState != null) { 
     long id = savedInstanceState.getLong(STA_TXN_ID); 
     ... 
    } else { 
     ... read fresh 
    } 

    mDateTV = (TextView) findViewById(R.id.ASTVDate); 
    mDayTV = (TextView) findViewById(R.id.ASTVDay); 
    mCatName = (TextView) findViewById(R.id.ASTVCatName); 
    mMonthTV = (TextView) findViewById(R.id.ASTVMonth); 
    .... 

    Calendar c = java.util.Calendar.getInstance(); 
    c.setTime(txn.getTxnDate()); 
    mDateTV.setText("" + c.get(Calendar.DAY_OF_MONTH)); 
    mDayTV.setText(c.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US)); 
    mMonthTV.setText(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.US)); 
} 

E devo state usando appcompat-v7: 22.1.1 e sì I g e questi errori dopo proguard.

+0

Inserisci XML e codice Java pls – Josef

+0

aggiunto il mio rilevanti codice di prova nella richiesta modificata – Aalap

+0

Pls aggiunge il codice java completo, il problema è lì secondo il file di registro – Josef

risposta

2

Sembra seguente problema è esattamente a questo proposito: https://code.google.com/p/android/issues/detail?id=196430

+0

Come riassunto del problema di Google Code sopra riportato, il problema sembra verificarsi solo su dispositivi meno recenti (ad esempio 2.3.7 o precedenti). Personalmente mi sono imbattuto in questo problema con un dispositivo che esegue API 10 (2.3.7). Sembra che non verrà riparato in qualsiasi momento, se non mai, per i dispositivi più vecchi, ma è stato corretto su dispositivi più recenti, quindi niente utenti (e sviluppatori) possono fare a meno di ottenere un dispositivo più recente. –

+2

Questo non è solo un problema del dispositivo precedente. È un problema di stato di ripristino. Se prendi un telefono più recente, vai nelle impostazioni di debug e forza le attività per essere sempre uccisi vedrai che succederà. Ciò significa che se il tuo nuovo telefono sta per esaurire la memoria e deve eliminare le attività e ripristinarle dallo stato, fallirà. Google ha bisogno di risolvere questo! – lostintranslation

1

Secondo fonte di AAverin, Google Issue 196430, costruire strumenti versione 24 include una correzione.

E.G. cambiare la versione costruire strumenti in build.gradle:

buildToolsVersion "24.0.0" 

In alternativa, impedire gli arresti per la cattura (nel mio caso particolare):

try { 
    // Temporary fix for crash issue 
    mapView.onCreate(savedInstanceState); 
} catch (Throwable t) { 
    t.printStackTrace(); 
} 
+0

anche nel mio caso, si blocca in 'mapview.oncreate (savedInstanceState)' che viene chiamato nel mio frammento 'onViewCreated()' che si trova in un viewpager –

+1

E gli strumenti di compilazione 25 lo spezzano di nuovo! – QED

Problemi correlati