代码之家  ›  专栏  ›  技术社区  ›  Josh Laird

Parceler-无法找到SpannableString的读/写生成器

  •  0
  • Josh Laird  · 技术社区  · 8 年前
    Error:(27, 64) error: Parceler: Unable to find read/write generator for type android.text.SpannableString for android.text.SpannableString span2
    Error:(27, 87) error: Parceler: Unable to find read/write generator for type android.text.SpannableString for android.text.SpannableString span3
    Error:(27, 41) error: Parceler: Unable to find read/write generator for type android.text.SpannableString for android.text.SpannableString span1
    

    当我试图构建我的项目时,我遇到了上面的错误。因为我使用的类是 SpannableString 我知道我需要一些自定义序列化,我相信我已经实现了。有什么想法吗?

    请参阅下面的代码:

    @Parcel
    public class ParcelerTest
    {
        @ParcelPropertyConverter(SpannableStringParcelConverter.class)
        public SpannableString span1;
    
        @ParcelPropertyConverter(SpannableStringParcelConverter.class)
        public SpannableString span2;
    
        @ParcelPropertyConverter(SpannableStringParcelConverter.class)
        public SpannableString span3;
    
        @ParcelConstructor
        public ParcelerTest(SpannableString span1, SpannableString span2, SpannableString span3)
        {
            this.span1 = span1;
            this.span2 = span2;
            this.span3 = span3;
        }
    
        public class SpannableStringParcelConverter implements ParcelConverter
        {
            @Override
            public void toParcel(Object input, android.os.Parcel parcel)
            {
                parcel.writeParcelable(Parcels.wrap(parcel), 0);
            }
    
            @Override
            public Object fromParcel(android.os.Parcel parcel)
            {
                return Parcels.unwrap(parcel.readBundle(getClass().getClassLoader()));
            }
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   John Ericksen    8 年前

    啊,这里有几个问题,有些是合法的错误:

    1. 您需要注释构造函数参数。这是一个合法的bug,您应该能够对其进行注释。
    2. 您的ParcelConverter应该写入和读取SpannableString的内容,Parceler不直接处理此类型。如果您测试它,这将导致运行时错误。

    以下是您的代码的更新工作版本:

    @Parcel
    public class ParcelerTest
    {
        public SpannableString span1;
        public SpannableString span2;
        public SpannableString span3;
    
        @ParcelConstructor
        public ParcelerTest(@ParcelPropertyConverter(SpannableStringParcelConverter.class) SpannableString span1,
                            @ParcelPropertyConverter(SpannableStringParcelConverter.class) SpannableString span2,
                            @ParcelPropertyConverter(SpannableStringParcelConverter.class) SpannableString span3)
        {
            this.span1 = span1;
            this.span2 = span2;
            this.span3 = span3;
        }
    
        public static class SpannableStringParcelConverter implements ParcelConverter<SpannableString>
        {
            @Override
            public void toParcel(SpannableString input, android.os.Parcel parcel)
            {
                parcel.writeString(input.toString());
            }
    
            @Override
            public SpannableString fromParcel(android.os.Parcel parcel)
            {
                return new SpannableString(parcel.readString());
            }
        }
    }
    

    此外,使用 SpannableString 在代码库模型中。也许你可以用普通的 String 相反

    推荐文章