0

これは、EditTextのテーブルに入力された値のチェックを実行するコードです。値を入力するのが間違っている場合は、アラートダイアログが正しく表示されます。入力を修正し、ボタンをもう一度押して完了します。入力するとアプリがクラッシュします、なぜですか?

button = new Button(this);
button.setText("Riempi la prima Matrice");
tableLayout.addView(button);
button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        try {
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    array[t] = Double.parseDouble(values[i][j].getText().toString());
                    t++;
                }
            }
        }
        catch (NumberFormatException nfe) {
            AlertDialog.Builder builder;
            builder = new AlertDialog.Builder(SecondaAttivita.this);
            builder.setTitle("Error");
            builder.setMessage("Wrong input format");
            builder.setIcon(android.R.drawable.ic_dialog_alert);
            builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {}
            });
            builder.show();
        }
    }
});​

これはlogCatです

FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException
it.bisemanuDEV.prodMatrix.SecondaAttivita$1.onClick(SecondaAttivita.java:96)
android.view.View.performClick(View.java:2408)
android.view.View$PerformClick.run(View.java:8816)
android.os.Handler.handleCallback(Handler.java:587)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:123)
android.app.ActivityThread.main(ActivityThread.java:4627)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:521)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
dalvik.system.NativeStart.main(Native Method)
4

3 に答える 3

2

キャッチする例外のタイプがわからない場合は、以下のように一般的にしてください。

try{
   ...
}
catch (Exception ex) {
   ...
}
于 2012-04-25T19:37:03.910 に答える
1

エラーメッセージで、キャッチする例外のタイプが示されていると思います。

ArrayIndexOutOfBoundsException

それで

catch (ArrayIndexOutOfBoundsException aioobe) { }
于 2012-04-25T19:56:01.130 に答える
1

スタックトレースによると、doubleをに割り当てようとすると、配列array[t]のインデックスが無効であるため失敗します。tarray

編集:@Gophermofurのコメントを考慮した後、このスニペット以外の残りのコードが正しい場合は、修正するにはt、catchブロック内でリセットします。たとえば、 0として開始した場合は、キャッチされtたときに0にリセットします。NumberFormatException

2番目の編集:正しい入力を受け入れた後でも値を編集できる場合は、キャッチ内ではなく、キャッチ後のブロックにtリセットを固定することをお勧めします。finally

于 2012-04-25T19:41:42.303 に答える