2011-07-18 9 views
0

私は、ユーザーが収入を入力して税金を差し引いた後、その金額を後で参照できるようにファイルに保存する簡単なアプリケーションを作成しています。問題は、 'postTax' editTextに何かを入力しようとすると、一番下の例外がスローされるということです。私は明らかに私のロジックで何か愚かなことをやっているが、誰もが問題を見ることができますか?Androidアプリケーションが不要な例外をキャッチ

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    try { 

     if (preTax !=null){ 

      Double incomeAmount = Double.parseDouble(preTax.getText().toString()); 
      incomeAmount = incomeAmount - (0.2 *incomeAmount);  
      Double incomeRounded = Round(incomeAmount); 
      Toast.makeText(v.getContext(), "Your income minus tax = "+incomeRounded, Toast.LENGTH_LONG).show(); 
      String storeIncome = Double.toString(incomeRounded); 

      try{ 
       FileOutputStream fos = openFileOutput("income", Context.MODE_PRIVATE); 
       OutputStreamWriter osw = new OutputStreamWriter(fos); 
       osw.write(storeIncome); 

       osw.flush(); 
       osw.close(); 

      } catch(Exception e){ 
       Toast.makeText(this, "Error writing to file", Toast.LENGTH_LONG).show(); 
      } 
     } 

     else if (postTax!=null){ 

      Double incomeAmount = Double.parseDouble(postTax.getText().toString()); 
      Double incomeRounded = Round(incomeAmount); 
      Toast.makeText(v.getContext(), "Your income is: "+ incomeRounded, Toast.LENGTH_LONG).show(); 
      String storeIncome = Double.toString(incomeRounded); 


      try{ 
       FileOutputStream fos = openFileOutput("income", Context.MODE_PRIVATE); 
       OutputStreamWriter osw = new OutputStreamWriter(fos); 

       osw.write(storeIncome); 
       osw.flush(); 
       osw.close(); 

      } catch(Exception e){ 
       Toast.makeText(this, "Error writing to file", Toast.LENGTH_LONG).show(); 
      } 
     } 

    } catch (Exception e){ 
     Toast.makeText(v.getContext(), "Please fill in the relevant catagories", Toast.LENGTH_LONG).show(); 
    } 

答えて

2

これはまったく予想されます。ライン:postTax編集で入力した番号がdoubleに解析されない場合

Double incomeAmount = Double.parseDouble(postTax.getText().toString()); 

NumberFormatExceptionを投げることができます。最下部のcatchは、この例外をキャプチャするのに最も近いものです。

try-catchブロック内にこの行を(少数の後続のものと共に)置いて例外をキャッチします。 (しかし、トーストメッセージを「税金控除後の処理に失敗しました」のようなものに変更することをお勧めします)。

+0

Ah!あなたが正しいです。なぜこれがNumberFormatExceptionを引き起こしているのか分かりませんが、私が入力しているデータはpreTaxと同じで、例外をスローしませんか? – user650309

+0

あなたの 'if'構造のロジックによって' preTax'変数セットがある場合、 'postTax'パーツは実行されません(これは、' EditText'への参照です)。それについて考えると、それがあなたのコードの予期せぬ/誤った動作の主な理由であるかもしれません。 – Xion

関連する問題