16

Tôi nhìn thấy những lỗi sau đây trong báo cáo sự cố Android của tôi:

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) 

Nó dường như xảy ra liên tục khi nối lại hoạt động. Tôi không trực tiếp truy cập vào lớp SavedState trong bất kỳ mã nào.

EDIT: Layout Xml cho hoạt động của tôi là

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

Và thanh công cụ XML là

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

Và trong onCreate Hoạt động của tôi, tôi làm

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

Và tôi có đang sử dụng appcompat-v7: 22.1.1 và có tôi g et những lỗi này sau khi proguard.

+0

bài xml của bạn và mã java pls – Josef

+0

thêm có liên quan của tôi kiểm tra mã trong chỉnh sửa quetion – Aalap

+0

Xin vui lòng thêm mã java đầy đủ, vấn đề là có theo tập tin đăng nhập – Josef

Trả lời

2

Hình như sau vấn đề là chính xác về nó: https://code.google.com/p/android/issues/detail?id=196430

+0

Như một bản tóm tắt về vấn đề trên của Google Code, vấn đề dường như chỉ xảy ra trên các thiết bị cũ hơn (tức là 2.3.7 trở xuống). Cá nhân tôi gặp phải vấn đề này với một thiết bị chạy API 10 (2.3.7). Dường như nó sẽ không được sửa chữa bất kỳ lúc nào, nếu có, cho các thiết bị cũ hơn, nhưng đã được sửa trên các thiết bị mới hơn, vì vậy không có người dùng nào (và nhà phát triển) có thể làm việc thiếu thiết bị mới hơn. –

+2

Đây không chỉ là vấn đề về thiết bị cũ hơn. Đó là một vấn đề khôi phục trạng thái. Nếu bạn lấy một chiếc điện thoại mới hơn, đi vào các thiết lập gỡ lỗi và buộc các hoạt động luôn luôn bị giết, bạn sẽ thấy điều này xảy ra. Điều đó có nghĩa là nếu điện thoại mới của bạn sắp hết bộ nhớ và cần phải tắt các hoạt động và sau đó khôi phục chúng từ trạng thái nó sẽ thất bại. Google cần sửa lỗi này! – lostintranslation

1

Theo nguồn AAverin của, Google Issue 196430, xây dựng các công cụ phiên bản 24 bao gồm một sửa chữa.

E.G. thay đổi phiên bản công cụ xây dựng trong build.gradle:

buildToolsVersion "24.0.0" 

Ngoài ra, tránh sự cố bằng đánh bắt (trong trường hợp đặc biệt của tôi):

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

cũng trong trường hợp của tôi, nó đang bị rơi trong 'mapview.oncreate (savedInstanceState)' được gọi trong đoạn của tôi 'onViewCreated() 'trong một viewpager –

+1

Và các công cụ xây dựng 25 phá vỡ nó một lần nữa! – QED

Các vấn đề liên quan