В моем текущем приложении для Android есть следующий пользовательский класс даты
import kotlinx.datetime.LocalDate
import kotlinx.datetime.format
import kotlinx.serialization.Serializable
import shared.dates.MyDateFormatterFactory.createFormatter
import kotlin.properties.Delegates
@Serializable
data class MyDate internal constructor(
val format: String,
internal var date: LocalDate
) {
val string get() = _stringRepresentation
private val formatter = createFormatter(format)
private var _stringRepresentation by Delegates.observable(date.format(formatter)) { _, _, newValue ->
date = LocalDate.parse(newValue, formatter)
}
internal var internalDate by Delegates.observable(date) { _, oldValue, newValue ->
if (newValue != oldValue) {
date = newValue
_stringRepresentation = date.format(formatter)
}
}
fun set(newDate: String) {
_stringRepresentation = newDate
}
override fun toString() = _stringRepresentation
}
когда я пытаюсь передать его в качестве аргументов в действие, я получаю следующее исключение во время выполнения
FATAL EXCEPTION: main (Ask Gemini)
Process: com.squareup.timessquare.sample, PID: 27037
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = organisation.research.daily.FrankArgs)
at android.os.Parcel.writeSerializable(Parcel.java:2126)
at android.os.Parcel.writeValue(Parcel.java:1896)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:988)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620)
at android.os.Bundle.writeToParcel(Bundle.java:1303)
at android.os.Parcel.writeBundle(Parcel.java:1057)
at android.content.Intent.writeToParcel(Intent.java:11512)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:4248)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
at android.app.Activity.startActivityForResult(Activity.java:5377)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.kt:704)
at android.app.Activity.startActivityForResult(Activity.java:5335)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.kt:683)
at android.app.Activity.startActivity(Activity.java:5721)
at android.app.Activity.startActivity(Activity.java:5674)
at organisation.uikit.core.extensions.IntentExtensionsKt.startActivity(IntentExtensions.kt:16)
at organisation.research.daily.AFrank$Companion.invoke(AFrank.kt:1148)
at organisation.research.module.routing.ModuleRunner.startFrankProject$lambda$5(ModuleRunner.kt:140)
at organisation.research.module.routing.ModuleRunner.$r8$lambda$TpjcOuyCuzL1feKmvclHTm30cjY(Unknown Source:0)
at organisation.research.module.routing.ModuleRunner$$ExternalSyntheticLambda5.invoke(D8$$SyntheticClass:0)
at organisation.research.module.routing.ModuleRunner$preventModuleMissingAreFile$1.invokeSuspend(ModuleRunner.kt:358)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@9473510, Dispatchers.Main]
Caused by: java.io.NotSerializableException: shared.dates.MyDate
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at android.os.Parcel.writeSerializable(Parcel.java:2121)
... 29 more
в чем проблема? MyDate должен быть vals, один из них — String, другой — kotlinx.datetime.LocalDate, оба из которых сериализуемы сами по себе.
почему класс данных MyDate не сериализуем?
проблема вызвана этими двумя Delegates.observable?
Когда я заменяю @Serializable внедрением java.io.Serializable, я получаю следующее исключение
Caused by: java.io.NotSerializableException: shared.dates.MyDate$special$$inlined$observable$1
Подробнее здесь: https://stackoverflow.com/questions/790 ... rialisable
Почему мой пользовательский класс даты не сериализуется ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1727863563
Anonymous
В моем текущем приложении для Android есть следующий пользовательский класс даты
import kotlinx.datetime.LocalDate
import kotlinx.datetime.format
import kotlinx.serialization.Serializable
import shared.dates.MyDateFormatterFactory.createFormatter
import kotlin.properties.Delegates
@Serializable
data class MyDate internal constructor(
val format: String,
internal var date: LocalDate
) {
val string get() = _stringRepresentation
private val formatter = createFormatter(format)
private var _stringRepresentation by Delegates.observable(date.format(formatter)) { _, _, newValue ->
date = LocalDate.parse(newValue, formatter)
}
internal var internalDate by Delegates.observable(date) { _, oldValue, newValue ->
if (newValue != oldValue) {
date = newValue
_stringRepresentation = date.format(formatter)
}
}
fun set(newDate: String) {
_stringRepresentation = newDate
}
override fun toString() = _stringRepresentation
}
когда я пытаюсь передать его в качестве аргументов в действие, я получаю следующее исключение во время выполнения
FATAL EXCEPTION: main (Ask Gemini)
Process: com.squareup.timessquare.sample, PID: 27037
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = organisation.research.daily.FrankArgs)
at android.os.Parcel.writeSerializable(Parcel.java:2126)
at android.os.Parcel.writeValue(Parcel.java:1896)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:988)
at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620)
at android.os.Bundle.writeToParcel(Bundle.java:1303)
at android.os.Parcel.writeBundle(Parcel.java:1057)
at android.content.Intent.writeToParcel(Intent.java:11512)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:4248)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
at android.app.Activity.startActivityForResult(Activity.java:5377)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.kt:704)
at android.app.Activity.startActivityForResult(Activity.java:5335)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.kt:683)
at android.app.Activity.startActivity(Activity.java:5721)
at android.app.Activity.startActivity(Activity.java:5674)
at organisation.uikit.core.extensions.IntentExtensionsKt.startActivity(IntentExtensions.kt:16)
at organisation.research.daily.AFrank$Companion.invoke(AFrank.kt:1148)
at organisation.research.module.routing.ModuleRunner.startFrankProject$lambda$5(ModuleRunner.kt:140)
at organisation.research.module.routing.ModuleRunner.$r8$lambda$TpjcOuyCuzL1feKmvclHTm30cjY(Unknown Source:0)
at organisation.research.module.routing.ModuleRunner$$ExternalSyntheticLambda5.invoke(D8$$SyntheticClass:0)
at organisation.research.module.routing.ModuleRunner$preventModuleMissingAreFile$1.invokeSuspend(ModuleRunner.kt:358)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@9473510, Dispatchers.Main]
Caused by: java.io.NotSerializableException: shared.dates.MyDate
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
at android.os.Parcel.writeSerializable(Parcel.java:2121)
... 29 more
в чем проблема? MyDate должен быть vals, один из них — String, другой — kotlinx.datetime.LocalDate, оба из которых сериализуемы сами по себе.
почему класс данных MyDate не сериализуем?
проблема вызвана этими двумя Delegates.observable?
Когда я заменяю @Serializable внедрением java.io.Serializable, я получаю следующее исключение
Caused by: java.io.NotSerializableException: shared.dates.MyDate$special$$inlined$observable$1
Подробнее здесь: [url]https://stackoverflow.com/questions/79046183/why-is-my-custom-date-class-not-serialisable[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия