16

Ich bin den folgenden Fehler in meinem Android-Crash-Berichte zu sehen:

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) 

Es scheint zeitweise zu passieren, wenn eine Tätigkeit wieder aufnehmen. Ich greife nicht direkt auf die SavedState-Klasse in irgendeinem Code zu.

EDIT: Layout-XML-Code für meine Tätigkeit ist

<?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" /> 
.... 

Und Symbolleiste XML ist

<?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"/> 

Und in meiner Tätigkeit des onCreate ich

@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)); 
} 

Und ich habe Habe appcompat-v7: 22.1.1 und ja ich g und diese Fehler nach dem Programm.

+0

Post XML und Java-Code pls – Josef

+0

Hinzugefügt mein relevant Testcode in bearbeiteter Frage – Aalap

+0

Pls addieren Sie den vollen Java-Code, das Problem ist dort entsprechend Protokolldatei – Josef

Antwort

2

Sieht aus wie Ausgabe finden Sie genau darüber nach: https://code.google.com/p/android/issues/detail?id=196430

+0

Als eine Zusammenfassung des obigen Google-Code-Problems scheint das Problem nur auf älteren Geräten (d. H. 2.3.7 und niedriger) aufzutreten. Persönlich stieß ich auf dieses Problem mit einem Gerät mit API 10 (2.3.7). Es sieht so aus, als ob es in naher Zukunft für ältere Geräte nie repariert wird, aber auf neueren Geräten behoben wurde, so dass nichts (ein Entwickler) es schaffen kann, ein neueres Gerät zu bekommen. –

+2

Dies ist nicht nur ein älteres Geräteproblem. Es ist ein Wiederherstellungsstatusproblem. Wenn Sie ein neueres Telefon verwenden, in Debug-Einstellungen gehen und Aktivitäten erzwingen, um immer getötet zu werden, werden Sie sehen, dass dies geschieht. Das bedeutet, wenn auf Ihrem neueren Telefon der Arbeitsspeicher knapp wird und Sie Aktivitäten beenden müssen, um sie wiederherzustellen, schlägt der Vorgang fehl. Google muss das beheben! – lostintranslation

1

Nach AAverin der Quelle, Google Issue 196430, Build-Tools Version 24 enthält ein Update.

E.G. Ändern Sie die Build-Tools Version in build.gradle:

buildToolsVersion "24.0.0" 

Alternativ verhindern Abstürze durch den Fang (in meinem Fall):

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

auch in meinem Fall, es stürzt in 'mapview.oncreate (savedInstanceState)', die in meinem Fragment 'onViewCreated()' aufgerufen wird, die in einem Viewpager ist –

+1

Und Build-Tools 25 bricht es wieder! – QED

Verwandte Themen