writeSparseArray支持SparseArray <int []>?</int []>

时间:2015-01-12 07:41:55

标签: java android sparse-array

我在SparseArray<int[]>中有一个参数,并希望序列化它。

但Parcelable的writeSparseArray(Object)似乎不支持int[]。 是否有其他方法可以序列化SparseArray<int[]>,或者仅将int[]更改为对象?

1 个答案:

答案 0 :(得分:2)

我检查了Parcel.writeSparseArray()方法,在我看来存在一些问题,因为这个方法应该像writeList()一样通用。它看起来像:

public final void writeSparseArray(SparseArray<Object> val)

应该是

public final void writeSparseArray(SparseArray<? extends Object> val)

public final <T> void writeSparseArray(SparseArray<T> val)

public final void writeSparseArray(SparseArray val)

因此,您必须为SparseArray对象实现此方法的自己的实现。我不确定这是最好的解决方案,但你可以试试这个:

public void writeSparseArray(Parcel dest, SparseArray<int[]> sparseArray) {
    if (sparseArray == null) {
        dest.writeInt(-1);
        return;
    }
    int size = sparseArray.size();
    dest.writeInt(size);
    int i=0;
    while (i < size) {
        dest.writeInt(sparseArray.keyAt(i));
        dest.writeIntArray(sparseArray.valueAt(i));
        i++;
    }
}

private SparseArray<int[]> readSparseArrayFromParcel(Parcel source){
    int size = source.readInt();
    if (size < 0) {
        return null;
    }
    SparseArray sa = new SparseArray(size);
    while (size > 0) {
        int key = source.readInt();
        int[] value = source.createIntArray();
        sa.put(key, value);
        size--;
    }
    return sa;
}