标签: kotlinx.serialisation

X类不是抽象的,并且没有实现android.os.Parcelable中定义的有趣的writeToParcel()

在我的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

9
推荐指数
1
解决办法
2344
查看次数

SerializationException:找不到无参数序列化器

我正在创建一个Kotlin Multiplatform库; 实际上我有3个模块(common,jvmjs),

在我获得的类路径中: classpath "org.jetbrains.kotlin:kotlin-serialization:${versions.kotlin}"

在我的模块中,我得到了:

  • 共同: "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${versions.kotlinSerialization}"
  • JDK: "org.jetbrains.kotlinx:kotlinx-serialization-runtime:${versions.kotlinSerialization}"
  • JS: "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

6
推荐指数
2
解决办法
1060
查看次数