【问题标题】:MessagePack : MessageTypeException: Expected raw value, but got boolean [Android]MessagePack:MessageTypeException:预期的原始值,但得到布尔值 [Android]
【发布时间】:2023-04-08 11:00:01
【问题描述】:

我正在我的 android 应用程序中实现 MessagePack。仅当应用在 API 22 以下设备中运行时反序列化响应数据时出现以下错误;

Caused by: org.msgpack.MessageTypeException: Expected raw value, but got boolean
at org.msgpack.unpacker.Accept.acceptBoolean(Accept.java:33)
at org.msgpack.unpacker.MessagePackUnpacker.readOneWithoutStackLarge(MessagePackUnpacker.java:154)
at org.msgpack.unpacker.MessagePackUnpacker.readOneWithoutStack(MessagePackUnpacker.java:139)
at org.msgpack.unpacker.MessagePackUnpacker.readOne(MessagePackUnpacker.java:73)
at org.msgpack.unpacker.MessagePackUnpacker.readString(MessagePackUnpacker.java:472)
at org.msgpack.template.StringTemplate.read(StringTemplate.java:46)
at org.msgpack.template.StringTemplate.read(StringTemplate.java:25)
at org.msgpack.template.builder.ReflectionTemplateBuilder$FieldTemplateImpl.read(ReflectionTemplateBuilder.java:70)
at org.msgpack.template.builder.ReflectionTemplateBuilder$ReflectionClassTemplate.read(ReflectionTemplateBuilder.java:143)

如果我在 API 22 或更高版本的设备上运行相同的应用程序,一切正常。

以下代码用于反序列化;

private T readMessagePack(byte[] response, Class<T> responseType) throws Exception
    {        
        MessagePack msgpack = new MessagePack();
        TemplateRegistry registry = new TemplateRegistry(null);
        ReflectionTemplateBuilder builder = new ReflectionTemplateBuilder(registry);
        Template<T> objTemplate = builder.buildTemplate(responseType);
        BufferUnpacker unpacker = msgpack.createBufferUnpacker();
        unpacker.resetReadByteCount();
        unpacker.wrap(response);
        return objTemplate.read(unpacker, null);

    }

我正在使用org.msgpack:msgpack:0.6.8 依赖。

【问题讨论】:

    标签: android serialization deserialization msgpack


    【解决方案1】:

    经过研究,我解决了我的问题。可能我的回答会对某人有所帮助。

    这个问题是由 BufferUnpacker 返回的声明字段的顺序引起的。为此,我们必须在序列化和反序列化时使用@Index() 注释。 例如;

    @Index(0)
        public boolean state;
    @Index(1)
        public String error_message;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2018-07-01
      • 2016-06-27
      • 1970-01-01
      • 2015-03-23
      • 2020-06-27
      相关资源
      最近更新 更多