Java WriteSparsarray支持Sparsarray<;int[]>;?

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)

我在SparseArray中有一个参数,我想序列化它

但是包裹的
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;
}