java - writeSparseArray 支持 SparseArray<int[]> 吗?

标签 java android sparse-array

我有一个参数 SparseArray<int[]> ,并想要序列化它。

但是writeSparseArray(Object)对于 Parcelable 似乎不支持 int[] 。 还有其他方法可以序列化 SparseArray<int[]> ,或者只更改int[]反对?

最佳答案

我检查了 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;
}

关于java - writeSparseArray 支持 SparseArray<int[]> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897331/

相关文章:

java - Apache Tomcat/JBoss EJBInvokerServlet/JMXInvokerServlet (RMI over HTTP) 编码对象远程代码执行

java - 在运行方法时是否有一个好的设计模式来检查权限?

java - JPanel GridBagLayout

java - 面剔除 - 隐藏立方体中所有非正面的面

带有字符串键的Android SparseArray?

java - 如何将 SparseArray 转换为 ArrayList?

android - 经纬度为已知点计算100米距离

android - 更改 Android 中 CollapsingToolbarLayout 中工具栏标题的字体大小

c# - 高效的 Int32/Uint32 排序映射/稀疏数组

android - 如何在包中存储稀疏数组