Java WriteSparsarray支持Sparsarray<;int[]>;?
我在SparseArray中有一个参数,我想序列化它 但是包裹的Java WriteSparsarray支持Sparsarray<;int[]>;?,java,android,sparse-array,Java,Android,Sparse Array,我在SparseArray中有一个参数,我想序列化它 但是包裹的writesparsaarray(Object)似乎不支持int[]。 是否有其他方法可以序列化SparseArray,或者只将int[]更改为Object?我检查了Parcel.writesParserray()方法,我认为存在一些问题,因为该方法应该像writeList()一样是泛型的。它看起来像: public final void writeSparseArray(SparseArray<Object> val)
writesparsaarray(Object)
似乎不支持int[]
。
是否有其他方法可以序列化SparseArray,或者只将
int[]
更改为Object?我检查了Parcel.writesParserray()方法,我认为存在一些问题,因为该方法应该像writeList()一样是泛型的。它看起来像:
public final void writeSparseArray(SparseArray<Object> 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;
}
public void writesparsaarray(地块目的地,SparseArray SparseArray){
if(sparseArray==null){
目的地记录(-1);
返回;
}
int size=sparseArray.size();
目的写入(大小);
int i=0;
而(i0){
int key=source.readInt();
int[]value=source.createIntArray();
sa.put(键、值);
大小--;
}
返回sa;
}
您可以在循环中写入数组,因为第一个参数添加SparseArray大小。@KonradKrakowiak您的意思是将SparseArray拆分为int[]s,并按writeInArray(int[])、writeArray(index)放置?但是,如何通过readIntArray读出它呢?通过新参数进行区分?我检查它并公开post@KonradKrakowiak你能给我一个示例代码吗?谢谢。你可以查看我的解决方案。我希望它能帮助你欢迎我很高兴能帮助你。
public final <T> void writeSparseArray(SparseArray<T> val)
public final void writeSparseArray(SparseArray val)
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;
}