Можно ли передать лямбду Intent? - PullRequest
0 голосов
/ 18 ноября 2018

Мне было интересно, можно ли передать лямбду в Intent в kotlin, так как лямбды являются Serializable, но с этим кодом я получаю ошибку при создании PendingIntent.

val bundle = bundleOf(ACTION to { pause() })
val playButtonIntent = Intent(this, MusicService::class.java).apply {
        putExtras(bundle)
}
val pendingPlayIntent = PendingIntent.getService(this, 1, playButtonIntent, 0)

ошибка:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object

1 Ответ

0 голосов
/ 19 ноября 2018

Лямбда сама по себе сериализуема.Но в вашем случае он закрывает переменную bundle некоторого типа, которая, вероятно, не сериализуема.Таким образом, создается класс Lambda, который включает член для хранения этой закрытой переменной.Вы не можете создать сериализуемый объект, содержащий внутри себя вещи, которые нарушают сериализацию.

Поэтому вам нужно найти способ не хранить этот класс связки или сделать его сериализуемым.

См. Этот другой вопрос в SO для более подробной информации: https://stackoverflow.com/a/48870902/3679676

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...