正如问题标题所说,我试图在onSaveInstanceState期间保存一个2d int数组,尝试了显而易见的事情:
outState.putIntArray("matrix",matrix);
得到:
Error:(58, 39) error: incompatible types: int[][] cannot be converted to int[]
我有什么想做的?
答案 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数组似乎是正确的方法。