如何在活动之间传递一个double数组(boolean [] [])?

时间:2012-03-05 05:06:05

标签: java android arrays android-activity boolean

我看不到要将双布尔数组传递给另一个活动。我使用putExtra,当我检索它并将其转换为boolean[][]时,它声明它无法转换和崩溃。但是,Boolean []可以正常工作。

我如何在活动之间传递boolean[][]

3 个答案:

答案 0 :(得分:3)

如果你绝对需要一个boolean [] [](并且不能只通过传递给Parcel.writeBooleanArray()的一个flat boolean []数组),那么正式的方法就是将它包装成一个可分类,并在那里进行编组/解组。

我将草拟代码,虽然没有经过测试,但肯定存在一些问题。

public class BooleanArrayArray implements Parcelable {
    private final boolean[][] mArray;

    public BooleanArrayArray(boolean[][] array) {
        mArray = array;
    }

    private BooleanArrayArray(Parcelable in) {
        boolean[][] array;
        final int N = in.readInt();
        array = new boolean[][N];
        for (int i=0; i<N; i++) {
            array[i] = in.createBooleanArray();
        }
        mArray = array;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        final int N = mArray.length;
        out.writeInt(N);
        for (int i=0; i<N; i++) {
            out.writeBooleanArray(mArray[i]);
        }
    }

    public static final Parcelable.Creator<BooleanArrayArray> CREATOR
            = new Parcelable.Creator<BooleanArrayArray>() {
        public BooleanArrayArraycreateFromParcel(Parcel in) {
            return new BooleanArrayArray(in);
        }

        public BooleanArrayArray[] newArray(int size) {
            return new BooleanArrayArray[size];
        }
    };
}

答案 1 :(得分:1)

如果你真的需要一个二维数组,你可以轻松地将二维数组转换为一维数组,以便在各个活动之间传递:

public boolean[] toOneDimension(boolean[][] input){
    boolean[] output = new boolean[input.length * input[0].length];

    for(int i = 0; i < input.length; i++){
        for(int j = 0; j < input[i].length; j++){
            output[i*j] = input[i][j];
        }
    }

    return output;
}

然后你可以像这样建立一个二维数组:

public boolean[][] toTwoDimensions(int dimensions, boolean[] input){

    boolean[][] output = new boolean[input.length / dimensions][dimensions];

    for(int i = 0; i < input.length; i++){
        output[i/dimensions][i % dimensions] = input[i];
    }

    return output;
}

然后像这样使用:

public static void main(String[] args){
    int size = 10;

    Random rand = new Random();
    Tester tester = new Tester(); //example code holder
    boolean[][] value = new boolean[size+1][size];

    for(int i = 0; i < size+1; i++){
        for(int j = 0; j < size; j++){
            value[i][j] = rand.nextBoolean();
        }
    }


    boolean [][] output = tester.toTwoDimensions(size, tester.toOneDimension(value));

    for(int i = 0; i < size+1; i++){
        for(int j = 0; j < size; j++){
            assert value[i][j] == output[i][j];
        }
    }


}

唯一的要求是在展平数组之前需要知道数组的维度。

答案 2 :(得分:0)

这是旧的,但对我帮助很大,所以我想分享我的发现。 我使用Parcelabler使我的Object Class Parcelable(因为我读过的所有内容都是用火星写的),然后我使用@John Ericksen的答案在我的Object Class中实现它以及一些让我的生活更轻松的方法{ {1}}和flattenMultiDimensionalArray以及最终结果。

对于二维数组

MultiDimensionalArray .java

restoreMultiDimensionalArray

}