Android低版本传递Firebase Timestamp遇类未找到错误及解决尝试
问题:传递Firebase Timestamp到Activity在旧Android版本报错
我尝试使用intent.putExtra("timeStamp", timeStamp)将com.google.firebase.Timestamp对象传递到另一个Activity,但在部分Android旧版本中触发以下错误:
Class not found when unmarshalling: com.google.firebase.Timestamp java.lang.ClassNotFoundException: com.google.firebase.Timestamp at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:454) at android.os.Parcel.readParcelableCreator(Parcel.java:3338) at android.os.Parcel.readParcelable(Parcel.java:3272) at android.os.Parcel.readValue(Parcel.java:3174) at android.os.Parcel.readArrayMapInternal(Parcel.java:3567) at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) at android.os.BaseBundle.unparcel(BaseBundle.java:236) at android.os.BaseBundle.getString(BaseBundle.java:1196) at m.sm.a(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):42) at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreatedByScionActivityInfo(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):23) at m.io.v(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):33) at m.bx.onTransact(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):21) at android.os.Binder.transact(Binder.java:1052) at com.google.android.gms.internal.measurement.zzbu.zzb(com.google.android.gms:play-services-measurement-base@@22.2.0:21) at com.google.android.gms.internal.measurement.zzdn.onActivityCreatedByScionActivityInfo(com.google.android.gms:play-services-measurement-base@@22.2.0:123) at com.google.android.gms.internal.measurement.zzfq.zza(com.google.android.gms:play-services-measurement-sdk-api@@22.2.0:11) at com.google.android.gms.internal.measurement.zzed$zzb.run(com.google.android.gms:play-services-measurement-sdk-api@@22.2.0:12) 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:923) Caused by: java.lang.ClassNotFoundException: com.google.firebase.Timestamp 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:3338) at android.os.Parcel.readParcelable(Parcel.java:3272) at android.os.Parcel.readValue(Parcel.java:3174) at android.os.Parcel.readArrayMapInternal(Parcel.java:3567) at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) at android.os.BaseBundle.unparcel(BaseBundle.java:236) at android.os.BaseBundle.getString(BaseBundle.java:1196) at m.sm.a(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):42) at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.onActivityCreatedByScionActivityInfo(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):23) at m.io.v(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):33) at m.bx.onTransact(:com.google.android.gms.dynamite_measurementdynamite@250632022@25.06.32 (150400-0):21) at android.os.Binder.transact(Binder.java:1052) at com.google.android.gms.internal.measurement.zzbu.zzb(com.google.android.gms:play-services-measurement-base@@22.2.0:21) at com.google.android.gms.internal.measurement.zzdn.onActivityCreatedByScionActivityInfo(com.google.android.gms:play-services-measurement-base@@22.2.0:123) at com.google.android.gms.internal.measurement.zzfq.zza(com.google.android.gms:play-services-measurement-sdk-api@@22.2.0:11) at com.google.android.gms.internal.measurement.zzed$zzb.run(com.google.android.gms:play-services-measurement-sdk-api@@22.2.0:12) 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:923) Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
我尝试了多种方案但均未解决,部分方案甚至导致全版本报错或Timestamp功能失效,具体尝试如下:
尝试1:
Activity 1:intent.putExtra("timeStamp", timeStamp)Activity 2:
val timeStamp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { intent.getParcelableExtra("timeStamp", Timestamp::class.java) } else { intent.getParcelableExtra<Timestamp>("timeStamp") }尝试2:
Activity 1:intent.putExtra("timeStamp", timeStamp)Activity 2:
intent.setExtrasClassLoader(Timestamp::class.java.classLoader) val timeStamp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { intent.getParcelableExtra("timeStamp", Timestamp::class.java) } else { intent.getParcelableExtra<Timestamp>("timeStamp") }尝试3:
Activity 1:intent.setExtrasClassLoader(Timestamp::class.java.classLoader) intent.putExtra("timeStamp", timeStamp)Activity 2:
val timeStamp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { intent.getParcelableExtra("timeStamp", Timestamp::class.java) } else { intent.getParcelableExtra<Timestamp>("timeStamp") }尝试4(改用Long类型转换):
Activity 1:intent.putExtra("timeStampLong", claim.sentTime.seconds)Activity 2:
val timeStampLong = intent.getLongExtra("timeStampLong", -1L) val timeStamp = Timestamp(Date(timeStampLong))该方案起初看似可行,但转换后的Timestamp在后续使用时无响应(其他位置类似转换可正常工作)。
内容的提问来源于stack exchange,提问作者Para1life
相关产品推荐
相关产品推荐

