首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin - android.os.BadParcelableException:解组时的ClassNotFoundException:

Kotlin - android.os.BadParcelableException:解组时的ClassNotFoundException:
EN

Stack Overflow用户
提问于 2018-04-14 15:10:12
回答 2查看 866关注 0票数 1

我正在使用org.jetbrains.kotlin.android.extensions来打包数据。

这是我的数据类

代码语言:javascript
复制
@Parcelize
data class MusicTrack(
    val id: Long,
    val title: String,
    val albumId: String,
    val artist: String,
    val duration: String,
    val trackArt: String = "",
    val fileUri: Uri) : Parcelable

这就是我发送数据的方式

代码语言:javascript
复制
  override fun playTrack(position: Int, musicList: ArrayList<MusicTrack>) {
    info { musicList }
    val bundle = bundleOf(
            Config.MusicConfig.MUSIC_TRACKS to musicList,
            Config.MusicConfig.MUSIC_TRACK_POSITION to position)


    MediaControllerCompat.getMediaController(this).transportControls.playFromUri(Uri.parse("Hack"), bundle)
}

然后像这样使用包裹

代码语言:javascript
复制
  override fun onPlayFromUri(uri: Uri?, extras: Bundle?) {
        super.onPlayFromUri(uri, extras)

        val tracks = extras?.getParcelable<MusicTrack>(Config.MusicConfig.MUSIC_TRACKS) as ArrayList<*>

        info { tracks }

    }

它抛出了上面的错误android.os.BadParcelableException: ClassNotFoundException when unmarshalling:

但是,当我尝试在活动中使用它时

代码语言:javascript
复制
    val songsList = intent.getStringArrayListExtra("Extras")
    info { songsList }

它起作用了!有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-14 19:28:15

您正在尝试读取单个MusicTrack,但是在Bundle中有它们的列表。你需要给getParcelableArrayList<MusicTrack>打电话。

票数 1
EN

Stack Overflow用户

发布于 2018-04-14 15:44:18

Buid.gradle中尝试此功能解决了我的问题

代码语言:javascript
复制
apply plugin: 'org.jetbrains.kotlin.android.extensions'
androidExtensions {
    experimental = true
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49828863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档