0
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

I'm getting the above error when I try to build my project. As the classes I'm using are SpannableString I know I require some custom serialization which I believe I have implemented. Any ideas?

See my code below:

@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()));
        }
    }
}
4

1 回答 1

1

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

  1. 您需要将内部类定义为静态的。Parceler 应该对此有更好的错误。
  2. 您需要注释构造函数参数。这是一个合法的错误,您应该也可以注释。
  3. 您的 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());
        }
    }
}

此外,在代码库模型中使用 a 有点奇怪SpannableString。也许您可以只使用普通的String

于 2016-09-16T00:40:40.377 回答