【问题标题】: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);
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案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");
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-20
          • 1970-01-01
          • 1970-01-01
          • 2016-12-08
          相关资源
          最近更新 更多