writeSparseArray 支持 SparseArray<int[]>?
writeSparseArray support SparseArray<int[]>?
我在 SparseArray<int[]>
中有一个参数,并且想要 序列化 它。
但是Parcelable的writeSparseArray(Object)
好像不支持int[]
。
有没有其他方法序列化SparseArray<int[]>
,或者只把int[]
改成Object?
我检查了 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;
}
我在 SparseArray<int[]>
中有一个参数,并且想要 序列化 它。
但是Parcelable的writeSparseArray(Object)
好像不支持int[]
。
有没有其他方法序列化SparseArray<int[]>
,或者只把int[]
改成Object?
我检查了 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;
}