0

我正在将一个 int 数组从一个类传递到另一个类,但是当我尝试从中访问值时出现错误。我不知道为什么,希望有人能启发我吗?

这是调用第二个类的第一个类:

public class ConvertToGrid extends Activity{

DrawGrid v;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...code...
    int[] binArray = {Color.RED, Color.WHITE, Color.YELLOW, ...};

    v = new DrawGrid(this, binArray);
    setContentView(v);
}}

这调用了我的 DrawGrid 视图:

public class DrawGrid extends View{

private int[] binary;

public DrawGrid(Context context) {
    super(context);
}

public DrawGrid(Context context, int[] inBinary) {
    super(context);
    binary = inBinary.clone();
}

int sq00c = binary[0];
...etc}

我做错了什么以至于它无法访问这个称为二进制的 int 数组?如果我将 int 数组移动到 DrawGrid 中,它可以毫无问题地访问单元格,但是通过我的构造传递它似乎使它无法访问。如果有人问,我不能只在 DrawGrid 中定义数组,因为它是由 ConvertGrid 中的代码定义的。

也许我以错误的方式解决这个问题,并且有更好的方法来传递 int 数组?谢谢

编辑:

日志猫:

E/AndroidRuntime(12035): FATAL EXCEPTION: main
E/AndroidRuntime(12035): java.lang.RuntimeException: Unable to start activity ComponentInfo{bras2756.ox.ac.uk.colourgrid/bras2756.ox.ac.uk.colourgrid.ConvertToGrid}: java.lang.NullPointerException
4

2 回答 2

4

你不能这样做,因为你的int sq00c = binary[0];类型语句在方法体之外,因此在你的构造函数被调用之前被执行,这使得binary数组为空。因此,当您尝试访问其中的数据时,您会遇到ArrayIndexOutOfBounds异常。

尝试使用:

public class DrawGrid extends View{

    private int[] binary;
    private int sq00c;
    etc....

    public DrawGrid(Context context) {
        super(context);
    }

    public DrawGrid(Context context, int[] inBinary) {
        super(context);
        binary = inBinary;
        sq00c = binary[0];
        ...etc
    }
}

我已经将 int 声明和赋值一分为二。int 仍然在类级别声明,但仅在调用构造函数时才被赋予一个值。

于 2013-03-28T21:54:15.593 回答
0

通过看到异常似乎这是你的问题

Clone() 创建一个浅拷贝检查这个链接

我认为以下修改将解决您的问题

public DrawGrid(Context context, int[] inBinary) {
super(context);
binary = inBinary; //update to this
}
于 2013-03-28T22:02:18.643 回答