0

あるクラスから別のクラスに int 配列を渡していますが、その値にアクセスしようとするとエラーが発生します。理由がわかりません。誰かが私を啓発してくれることを願っています。

2 番目のクラスを呼び出す最初のクラスは次のとおりです。

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 に移動すると、問題なくセルにアクセスできますが、コンストラクトで渡すとアクセスできなくなるようです。ConvertGrid のコードで定義されているように、DrawGrid で配列を定義することはできません。

おそらく私は間違った方法でこれを行っています.int配列を渡すためのより良い方法はありますか? ありがとう

編集:

LogCat:

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 宣言と代入を 2 つに分割しました。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 に答える