キー配列は次のように定義されています。
keys = new char[] {resolv, 'А', 'Б', 'В', 'Г', 'Д', 'Е',
'Ё', 'Ж', 'З', 'И', 'Й', 'К',
'Л', 'М', 'Н', 'О', 'П', 'Р',
'С', 'Т', 'У', 'Ф', 'Х', 'Ц',
'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь',
'Э', 'Ю', 'Я'};
「resolv」は 0x00 の定数 char 値ですが、この問題には関係ありません。
現在、このコードは「java.lang.ArrayIndexOutOfBoundsException: length=34; index=34」例外を発生させることがあります。
protected void LoadKeyRects() {
keyRects = new Rect[keys.length];
// Solve key
keyRects[0] = resRect;
// Rest of keys
int x, y;
for (int i=1; i<keys.length; i++) {
y = 214 + ( 87 * ((i-1)/11));
x = 7 + (((i-1)%11)*71);
keyRects[i] = new Rect (x, y, x+71, y+87);
}
}
これまでのところ、自分でエラーを再現することはできませんでしたが、サードパーティのデバイスで BugSense から十分なレポートを得ており、心配する必要があります。i にもかかわらず、keyRects[i] が keyRects[keys.length] を参照する場合があるようです。
何か案は?