Why is my Parcelable Creator not working?

2019-09-22 07:58发布

问题:

I failed to make my Class Parcelable and I don't know why

public class Set : Java.Lang.Object, IParcelable
{
    public string[] jugador { get; set; } = new string[2];
    public bool[] jugado { get; set; } = new bool[1] { false };
    public int[] games { get; set; } = new int[2] { 0, 0 };
    public int[] noforzados { get; set; } = new int[2] { 0, 0 };
    public int[] aces { get; set; } = new int[2] { 0, 0 };
    public int[] winners { get; set; } = new int[2] { 0, 0 };
    public int[] doblefaltas { get; set; } = new int[2] { 0, 0 };
    public int[] primeros { get; set; } = new int[2] { 0, 0 };
    public int[] primerosGanados { get; set; } = new int[2] { 0, 0 };
    public int[] segundos { get; set; } = new int[2] { 0, 0 };
    public int[] segundosGanados { get; set; } = new int[2] { 0, 0 };

    public int DescribeContents()
    {
        return 0;
    }

    public void WriteToParcel(Parcel parcel, ParcelableWriteFlags flags)
    {
        parcel.WriteStringArray(jugador);
        parcel.WriteBooleanArray(jugado);
        parcel.WriteIntArray(games);
        parcel.WriteIntArray(noforzados);
        parcel.WriteIntArray(aces);
        parcel.WriteIntArray(winners);
        parcel.WriteIntArray(doblefaltas);
        parcel.WriteIntArray(primeros);
        parcel.WriteIntArray(primerosGanados);
        parcel.WriteIntArray(segundos);
        parcel.WriteIntArray(segundosGanados);
    }

    public Set (string[] Jugador, int[] Games, int[] NoForzados, int[] Aces, int[] Winners, int[] DobleFaltas, int[] Primeros, int[] PrimerosGanados, int[] Segundos,
        int[] SegundosGanados)
    {
        jugador = Jugador; games = Games; noforzados = NoForzados; aces = Aces; winners = Winners; doblefaltas = DobleFaltas; primeros = Primeros;
        primerosGanados = PrimerosGanados; segundosGanados = SegundosGanados;
    }


    public class SetParcelableCreator : Java.Lang.Object, IParcelableCreator
    {
        public Java.Lang.Object CreateFromParcel(Parcel parcel)
        {
            return new Set(parcel.ReadStringArray(), parcel.ReadBooleanArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray()
                    , parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray();

        }

        public Java.Lang.Object[] NewArray(int size)
        {
            return new Java.Lang.Object[size];
        }
    }


    [ExportField("CREATOR")]
    public static SetParcelableCreator InitializeCreator()
    {
        return new SetParcelableCreator();
    }
}

Apparently, I get a compilation error in every ReadBlahArray(), but I don't know what is wrong.

public class SetParcelableCreator : Java.Lang.Object, IParcelableCreator
{
    public Java.Lang.Object CreateFromParcel(Parcel parcel)
    {
        return new Set(parcel.ReadStringArray(), parcel.ReadBooleanArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray()
                , parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray(), parcel.ReadIntArray();

回答1:

return new Set(parcel.ReadStringArray(), parcel.ReadBooleanArray()...

At

parcel.ReadBooleanArray()

You have no boolean arrays in the constructor

public Set (
    string[] Jugador, 
    int[] Games, 
    int[] NoForzados, 
    int[] Aces, 
    int[] Winners, 
    int[] DobleFaltas, 
    int[] Primeros, 
    int[] PrimerosGanados, 
    int[] Segundos,
    int[] SegundosGanados)

Did you forget to set jugado?