我正在使用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 }它起作用了!有人能帮我吗?
发布于 2018-04-14 19:28:15
您正在尝试读取单个MusicTrack,但是在Bundle中有它们的列表。你需要给getParcelableArrayList<MusicTrack>打电话。
发布于 2018-04-14 15:44:18
在Buid.gradle中尝试此功能解决了我的问题
apply plugin: 'org.jetbrains.kotlin.android.extensions'
androidExtensions {
experimental = true
}https://stackoverflow.com/questions/49828863
复制相似问题