0

私の最初のアンドロイドアプリを書いています。この関数を除いて、ほとんどすべてが機能します。すべてのテキスト ボックスに何らかの数値が含まれている場合でも、この関数でアプリがクラッシュします。また、これらのテキスト ボックス内のすべての値を取得して int に変換するより良い方法はありますか。activity.xml ファイルでは、すべてのテキスト ボックスが入力タイプ番号であることに注意してください。

public int updateclks()
{
  try{
    EditText v1= (EditText) findViewById(R.id.editText1);
    EditText v2 = (EditText) findViewById(R.id.EditText01);
    EditText v3 = (EditText) findViewById(R.id.EditText02);
    EditText v4 = (EditText) findViewById(R.id.EditText03);

    EditText c1= (EditText) findViewById(R.id.EditText04);
    EditText c2 = (EditText) findViewById(R.id.EditText05);
    EditText c3 = (EditText) findViewById(R.id.EditText06);
    EditText c4 = (EditText) findViewById(R.id.EditText07);
    try{ //error occurs somewhere around this block
    vsel[1]= Integer.parseInt(v1.getText().toString());
    vsel[2]= Integer.parseInt(v2.getText().toString());
    vsel[3]= Integer.parseInt(v3.getText().toString());
    vsel[4]= Integer.parseInt(v4.getText().toString());

    clk[1]= Integer.parseInt(c1.getText().toString());
    clk[2]= Integer.parseInt(c2.getText().toString());
    clk[3]= Integer.parseInt(c3.getText().toString());
    clk[4]= Integer.parseInt(c4.getText().toString());
  }
  catch(NumberFormatException e)
  {
    Context context = getApplicationContext();
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, "Fields cannot be empty", duration);
    toast.show();
    return 1;
  }
  return 0;
}
4

2 に答える 2

1

parseInt() はアプリをクラッシュさせません。この parseInt で何らかの例外が発生した場合、それを処理したときにキャッチされるためです。アプリケーションがまだクラッシュしているため、これらを正しく作成したかどうかにかかわらず、vse1 および clk1 配列を参照してください。

長さ 4 の vse1 配列を作成した場合は、配列の長さにも注意してください。次に、インデックス 1 ではなく 0 から開始することをお勧めします。そうしないと、ArrayIndexOutOfBounds によってアプリケーションがクラッシュします。

于 2012-12-06T05:19:39.857 に答える
0

私も同じ問題を抱えており、トリム機能を使用して解決できます。

clk[1]= Integer.parseInt(c1.getText().toString().trim());
于 2012-12-06T05:34:35.183 に答える