【问题标题】:Android: how to save 2d int array during onSaveInstanceState?Android:如何在 onSaveInstanceState 期间保存 2d int 数组?
【发布时间】:2023-03-05 21:35:01
【问题描述】:
正如问题标题所说,我试图在 onSaveInstanceState 期间保存一个 2d int 数组,尝试了明显的:
outState.putIntArray("matrix",matrix);
得到:
Error:(58, 39) error: incompatible types: int[][] cannot be converted to int[]
我应该做什么?
【问题讨论】:
标签:
android
matrix
multidimensional-array
android-studio
savestate
【解决方案1】:
您可以将其转换为一维数组并将行长度存储为单独的数组。例如。在伪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);
我猜你的行大小很可能都是一样的,在这种情况下你可以使用一个整数。
【解决方案3】:
由于我的数组只有 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");
它有效,但我同意对于多维数组,转换为一维数组似乎是正确的方法。