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

时间:2018-04-14 07:10:12

标签: android kotlin kotlin-android-extensions

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

这是我的数据类

@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

这是我通过

发送数据的方式
  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)
}

然后消费包裹

  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:

但是,当我尝试在

的活动中使用它时
    val songsList = intent.getStringArrayListExtra("Extras")
    info { songsList }

有效!谁能在这帮助我?

2 个答案:

答案 0 :(得分:0)

您尝试阅读单个MusicTrack,但在Bundle中有一个列表。{p> 您需要致电getParcelableArrayList<MusicTrack>

答案 1 :(得分:-1)

Buid.gradle 中尝试此操作,这解决了我的问题

apply plugin: 'org.jetbrains.kotlin.android.extensions'
androidExtensions {
    experimental = true
}