0

我正在尝试使用 kotlinx-serialization-protobuf 库版本 1.3.2 在我的 Android 应用程序中解码来自服务器的对象。

该对象有一个 FloatArray 属性:

@Serializable
class MyClassProtobuf {  
    

    @Serializable
    data class Template(
        @ProtoNumber(1)
        val createdAt: Long,
        @ProtoNumber(2)
        val vector: FloatArray
    )

}

解码时:

val serverTemplate = protobuf.decodeFromByteArray(MyClassProtobuf.Template.serializer(), response)

我收到错误:

W/System.err: kotlinx.serialization.protobuf.internal.ProtobufDecodingException: Expected wire type 5, but found 2
W/System.err:     at kotlinx.serialization.protobuf.internal.ProtobufReader.readFloat(ProtobufReader.kt:197)
W/System.err:     at kotlinx.serialization.protobuf.internal.ProtobufDecoder.decodeTaggedFloat(ProtobufDecoding.kt:157)
W/System.err:     at kotlinx.serialization.protobuf.internal.ProtobufTaggedDecoder.decodeFloatElement(ProtobufTaggedDecoder.kt:66)
W/System.err:     at kotlinx.serialization.internal.FloatArraySerializer.readElement(PrimitiveArraysSerializers.kt:229)
W/System.err:     at kotlinx.serialization.internal.FloatArraySerializer.readElement(PrimitiveArraysSerializers.kt:220)
W/System.err:     at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
W/System.err:     at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
W/System.err:     at kotlinx.serialization.protobuf.internal.ProtobufDecoder.decodeSerializableValue(ProtobufDecoding.kt:190)
W/System.err:     at kotlinx.serialization.protobuf.internal.ProtobufTaggedDecoder.decodeSerializableElement(ProtobufTaggedDecoder.kt:82)

我很肯定服务器正在将浮点数组发送回 Android 应用程序。我什至可以成功执行逆过程:在 Android 应用程序中对对象进行编码,将其发送到服务器并在服务器中对其进行解码。

顺便说一句,服务器中的对象具有 proto3 格式。

有谁知道为什么会出现这个错误?任何帮助将不胜感激!

谢谢!

4

0 回答 0