我看不到要将双布尔数组传递给另一个活动。我使用putExtra,当我检索它并将其转换为boolean[][]
时,它声明它无法转换和崩溃。但是,Boolean []可以正常工作。
我如何在活动之间传递boolean[][]
?
答案 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
}