在我的Android应用中,我想Place向我的Intent 添加一个Bundle,其中包括如下所述的对象。由于可序列化很慢并且不建议使用,因此我更喜欢使用Parcelable。
Althoug我使用Kotlin 1.3.31,在打包某些数据类时遇到问题。例:
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class Place(val street: String, val postal: String, val city: String) : Parcelable
Run Code Online (Sandbox Code Playgroud)
和Android Studio抱怨:
类'Place'不是抽象的,并且没有实现抽象成员public abstract fun writeToParcel(p0:Parcel !, p1:Int):android.os.Parcelable中定义的单位
根据一些教程
而已!您不再需要编写任何包裹方法!
https://android.jlelse.eu/yet-another-awesome-kotlin-feature-parcelize-5439718ba220
而且我不想使用
androidExtensions {
experimental = true
}
Run Code Online (Sandbox Code Playgroud)
生产中的东西。
我在这里有什么选择?
android parcelable android-bundle kotlin-android-extensions kotlinx.serialisation
我正在创建一个Kotlin Multiplatform库; 实际上我有3个模块(common,jvm和js),
在我获得的类路径中: classpath "org.jetbrains.kotlin:kotlin-serialization:${versions.kotlin}"
在我的模块中,我得到了:
"org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${versions.kotlinSerialization}""org.jetbrains.kotlinx:kotlinx-serialization-runtime:${versions.kotlinSerialization}""org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:${versions.kotlinSerialization}"和apply plugin: 'kotlinx-serialization'ofc.
但是当我运行这个简单的测试时:
@Serializable
data class ASimpleClass( val a: Int )
Run Code Online (Sandbox Code Playgroud)
.
@Test
fun testingMultiplatformCode_canSerialize() {
JSON.stringify( ASimpleClass( 1 ) )
}
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class studio.forface.ktmdb.ASimpleClass. For generic classes, such as lists, please provide serializer explicitly.
at kotlinx.serialization.PlatformUtilsKt.serializer(PlatformUtils.kt:28)
at studio.forface.ktmdb.ProjectTests.testingMultiplatformCode_canSerialize(ProjectTests.kt:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at …Run Code Online (Sandbox Code Playgroud) serialization multiplatform kotlin kotlin-multiplatform kotlinx.serialisation