これが単純な問題かどうかはわかりませんが、何が問題なのかわかりません。現在、Google Play のアプリから、IndexOutOfBoundsException の 3 件のレポートを受け取りましたpoints.get(++i)
。
public GameThread(SurfaceHolder sHolder, Context context, Handler handler)
{
points = new ArrayList<Float>();
running = true;
mSurfaceHolder = sHolder;
}
protected void doDraw(Canvas canvas)
{
Paint p = new Paint();
p.setStyle(Paint.Style.FILL);
p.setColor(Color.WHITE);
for (int i = 0; i < points.size(); i++)
{
float x = points.get(i);
float y = points.get(++i);
canvas.drawPoint(x, y, p);
}
}
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
points.add(x);
points.add(y);
return true;
}
失敗したインデックスは、そのサイズに等しい場所にアクセスしようとしています (実際には、1 つのエラーは
java.lang.IndexOutOfBoundsException: Invalid index 2205, size is 2206
まったく意味がないと言っています)、そのサイズはさまざまです。
これが起こっていることを確認できる唯一の方法は、何らかの理由でオブジェクトが 1 つだけポイントに追加された場合であり、なぜそれが起こるのかわかりません。onTouchEvent
独自のスレッドで実行されていませんね。