【问题标题】:How to fix "Parcel: Class not found when unmarshalling: androidx.fragment.app.FragmentManagerState" after updating material lib?更新材料库后如何修复“包裹:解组时找不到类:androidx.fragment.app.FragmentManagerState”?
【发布时间】:2020-09-27 17:33:14
【问题描述】:

我将com.google.android.material:material 更新到版本 1.2.0,现在我的应用程序以白黑闪烁。我在 logcat 中看到了这个异常:

E/Parcel: Class not found when unmarshalling: androidx.fragment.app.FragmentManagerState
    java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:454)
        at android.os.Parcel.readParcelableCreator(Parcel.java:3014)
        at android.os.Parcel.readParcelable(Parcel.java:2964)
        at android.os.Parcel.readValue(Parcel.java:2866)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:3244)
        at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
        at android.os.BaseBundle.unparcel(BaseBundle.java:236)
        at android.os.Bundle.getBundle(Bundle.java:924)
        at ky.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):17)
        at kk.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):2)
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):3)
        at cw.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):64)
        at ac.onTransact(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):4)
        at android.os.Binder.transact(Binder.java:914)
        at com.google.android.gms.internal.measurement.zza.zzb(com.google.android.gms:play-services-measurement-base@@17.2.0:20)
        at com.google.android.gms.internal.measurement.zzo.onActivityCreated(com.google.android.gms:play-services-measurement-base@@17.2.0:144)
        at com.google.android.gms.internal.measurement.zzbc.zza(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:4)
        at com.google.android.gms.internal.measurement.zzx$zza.run(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:11)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.ClassNotFoundException: androidx.fragment.app.FragmentManagerState
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:1358)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:1418)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:454) 
        at android.os.Parcel.readParcelableCreator(Parcel.java:3014) 
        at android.os.Parcel.readParcelable(Parcel.java:2964) 
        at android.os.Parcel.readValue(Parcel.java:2866) 
        at android.os.Parcel.readArrayMapInternal(Parcel.java:3244) 
        at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
        at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
        at android.os.Bundle.getBundle(Bundle.java:924) 
        at ky.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):17) 
        at kk.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):2) 
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreated(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):3) 
        at cw.a(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):64) 
        at ac.onTransact(:com.google.android.gms.dynamite_measurementdynamite@203315082@20.33.15 (120406-0):4) 
        at android.os.Binder.transact(Binder.java:914) 
        at com.google.android.gms.internal.measurement.zza.zzb(com.google.android.gms:play-services-measurement-base@@17.2.0:20) 
        at com.google.android.gms.internal.measurement.zzo.onActivityCreated(com.google.android.gms:play-services-measurement-base@@17.2.0:144) 
        at com.google.android.gms.internal.measurement.zzbc.zza(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:4) 
        at com.google.android.gms.internal.measurement.zzx$zza.run(com.google.android.gms:play-services-measurement-sdk-api@@17.2.0:11) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

经过一番研究,我发现androidx.fragment.app.FragmentManagerState 标有@SuppressLint("BanParcelableUsage")。我想这就是我的应用程序闪烁且无法正常工作的原因,但我不知道如何解决?我试图用谷歌搜索,但没有发现任何有用的东西。

我应该在哪里进一步搜索?我不记得曾经使用过这个类的明确性。有人可以帮忙吗?

【问题讨论】:

  • 您的异常指向 Google Play 服务做错了什么(查看它不拥有的捆绑包)。您使用的是最新版本的 Google Play 服务/Firebase 吗?
  • 我使用implementation 'com.google.android.gms:play-services-ads:19.4.0',ide 说它是最新版本。稍后我会尝试评论这个和广告用法来检查
  • 更新。我删除了play-services-ads,没有帮助

标签: android android-fragments exception


【解决方案1】:

我终于找到了解决方案。一旦我更新了材料库,我应该以更新的方式使用主题调整:

AppCompatDelegate.setDefaultNightMode(nightMode)

而不是

val newConfig = Configuration(activity.resources.configuration)
newConfig.uiMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK.inv()
newConfig.uiMode = newConfig.uiMode or uiNightMode
activity.resources.updateConfiguration(newConfig, null)
activity.setTheme(theme)

我刚刚替换了这些代码并从Theme.AppCompat.DayNight 继承了应用程序主题,现在它就像一个魅力!

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2020-05-31
    • 2023-01-17
    相关资源
    最近更新 更多