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

プロジェクトをビルドしようとすると、上記のエラーが発生します。私が使用しているクラスは、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()));
        }
    }
}
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());
        }
    }
}

SpannableStringまた、コードベースのモデルでa を使用するのは少し奇妙です。Stringたぶん、代わりにプレーンを使用できますか?

于 2016-09-16T00:40:40.377 に答える