Android:如何在onSaveInstanceState期间保存2d int数组?

时间:2014-11-14 09:28:57

标签: android matrix multidimensional-array android-studio savestate

正如问题标题所说,我试图在onSaveInstanceState期间保存一个2d int数组,尝试了显而易见的事情:

outState.putIntArray("matrix",matrix);

得到:

Error:(58, 39) error: incompatible types: int[][] cannot be converted to int[]

我有什么想做的?

3 个答案:

答案 0 :(得分:1)

您可以将其转换为1D数组并将行长度存储为单独的数组。例如。在伪java:

int[] sizes;
int[] values;
for (int[] row : matrix)
{
    values.append(row);
    sizes.append(row.length);
}

outState.putIntArray("matrix_values", values);
outState.putIntArray("matrix_sizes", sizes);

我想你的行大小可能都是相同的,在这种情况下你可以使用一个整数。

答案 1 :(得分:0)

没有合适的方法直接存储矩阵。但是存在用于存储一维阵列的方法。所以你要找的是如何将二维数组表示为一维。这是一个很好的起点,如何做到这一点 - Algorithm to convert a multi-dimensional array to a one-dimensional array

答案 2 :(得分:0)

由于我的数组只有2d,我尝试了这种方法:

保存:

outState.putIntArray("matrix4x0",matrix4x4[0]);
outState.putIntArray("matrix4x1",matrix4x4[1]);
outState.putIntArray("matrix4x2",matrix4x4[2]);
outState.putIntArray("matrix4x3",matrix4x4[3]);

要检索:

matrix4x4[0] = savedInstanceState.getIntArray("matrix4x0");
matrix4x4[1] = savedInstanceState.getIntArray("matrix4x1");
matrix4x4[2] = savedInstanceState.getIntArray("matrix4x2");
matrix4x4[3] = savedInstanceState.getIntArray("matrix4x3");

它有效,但我同意对于多维数组,转换为1D数组似乎是正确的方法。