web-dev-qa-db-fra.com

Lecture et écriture d'un tableau entier sur une parcelle

Je n'ai trouvé aucune solution pour traiter un tableau entier en cas de parcelle (je souhaite utiliser ces deux fonctions dest.writeIntArray (storeId); et in.readIntArray (storeId); ).

Voici mon code 

public class ResponseWholeAppData implements Parcelable {
    private int storeId[];

    public int[] getStoreId() {
        return storeId;
    }

    public void setStoreId(int[] storeId) {
        this.storeId = storeId;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public ResponseWholeAppData(){
        storeId = new int[2];
        storeId[0] = 5;
        storeId[1] = 10;
    }

    public ResponseWholeAppData(Parcel in) {

        if(in.readByte() == (byte)1) 
             in.readIntArray(storeId);  //how to do this storeId=in.readIntArray();  ?                          
        }

    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if(storeId!=null&&storeId.length>0)                   
        {
            dest.writeByte((byte)1);
            dest.writeIntArray(storeId);
        }
        else
            dest.writeByte((byte)0);

    }
    public static Parcelable.Creator<ResponseWholeAppData> getCreator() {
        return CREATOR;
    }

    public static void setCreator(Parcelable.Creator<ResponseWholeAppData> creator) {
        CREATOR = creator;
    }

    public static Parcelable.Creator<ResponseWholeAppData> CREATOR = new Parcelable.Creator<ResponseWholeAppData>()
            {
        public ResponseWholeAppData createFromParcel(Parcel in)
        {
            return new ResponseWholeAppData(in);
        }
        public ResponseWholeAppData[] newArray(int size)
        {
            return new ResponseWholeAppData[size];
        }
            };      
}
29
Atul Bhardwaj

Lorsque j'utilise "in.readIntArray(storeID)", j'obtiens une erreur:

"Causé par: Java.lang.NullPointerException Sur Android.os.Parcel.readIntArray (Parcel.Java:672)" .

Au lieu d'utiliser "readIntArray", j'ai utilisé ce qui suit:

storeID = in.createIntArray();

Maintenant, il n'y a pas d'erreur.

57
LionKing

Je suppose que la classe MyObj implémente Parcelable et implémente toutes les méthodes requises; Je ne proposerai ici que les détails concernant la lecture/écriture de colis.

Si la taille du tableau est connue à l'avance:

public void writeToParcel(Parcel out, int flags) {
    super.writeToParcel(out, flags);
    out.writeIntArray(mMyIntArray);        // In this example array length is 4
}

protected MyObj(Parcel in) {
    super(in);
    mMyIntArray = new int[4];
    in.readIntArray(mMyIntArray);
}

Autrement:

public void writeToParcel(Parcel out, int flags) {
    super.writeToParcel(out, flags);
    out.writeInt(mMyArray.length);        // First write array length
    out.writeIntArray(mMyIntArray);       // Then array content
}

protected MyObj(Parcel in) {
    super(in);
    mMyIntArray = new int[in.readInt()];
    in.readIntArray(mMyIntArray);
}
0