android.view.AbsSavedState $ 1 нельзя преобразовать в android.widget.CompoundButton $ SavedState - PullRequest
0 голосов
/ 01 октября 2018

Я вижу следующую ошибку в Crashlytics с большим количеством инцидентов:

Caused by java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.CompoundButton$SavedState
       at android.widget.CompoundButton.onRestoreInstanceState(CompoundButton.java)
       at android.view.View.dispatchRestoreInstanceState(View.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
       at android.view.View.restoreHierarchyState(View.java)
       at android.support.v4.app.Fragment.restoreViewState(Fragment.java:494)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1486)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
       at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
       at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
       at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2466)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
       at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
       at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
       at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
       at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
       at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:620)
       at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
       at android.app.Instrumentation.callActivityOnStart(Instrumentation.java)
       at android.app.Activity.performStart(Activity.java)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
       at android.app.ActivityThread.access$900(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
       at android.os.Handler.dispatchMessage(Handler.java)
       at android.os.Looper.loop(Looper.java)
       at android.app.ActivityThread.main(ActivityThread.java)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)

Однако эта трассировка стека ничего не говорит о моей кодовой базе, так как исключение выдается на уровне платформы.

Из того, что я прочитал, это может быть связано с дублированием идентификаторов, но я не могу найти ничего в своем коде, какие-либо идеи о том, как это отладить?

Я также попытался включить «Не сохранять действия» в параметрах разработчика, чтобы принудительно восстановить экземпляр, но я не могу воспроизвести сбой вручную.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

это может быть вызвано представлением с тем же resId, что и имя содержащего макета (основная причина).

это также может быть вызвано просмотром с дубликатами resId s, но это меньшевероятно, причина.

просмотр всего предложенного фрагмента XML (трудно сказать, какой из них это вызывает).

, но Edit> Find> Find in Path ... облегчает задачуискать вхождения;

искать имя одного макета за другим;затем для поиска в представлении resId.

0 голосов
/ 10 октября 2018

Хорошо получается, что я использую новый компонент Chip (расширяющий CompoundButton), и у меня была одна группа с чипом без идентификатора.

И это каким-то образом вызывает сбой приложения на старых телефонах (Android 6) из-за того, что один и тот же идентификатор назначен нескольким чипам, я могу только догадываться.

Я удалил этот чип (который не былнеобходимо в любом случае), и он больше не падает.

0 голосов
/ 10 октября 2018

Нетрудно получить точную проблему, не видя код и точный класс активности / фрагмента, но может быть ниже причина, которая может помочь вам отладить больше ..

  1. Возможно, у вас естьдублирующее имя вашего идентификатора или Просмотреть, какое совпадение создает утечку памяти при преобразовании.

  2. Возможно, неправильно импортирован CompoundButton, возможно, вы используете пользовательское представление или влияние на версию.

...