2017-01-27 2 views
0

初めてJavaに入り、私が働いているレストランで私の同僚の簡単なヒント電卓を作成しようとしていますが、editTextフィールドの1つを空のままにするとプログラムがクラッシュします。Android空editTextが私のプログラムをクラッシュする

MainACtivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    totalTipsInput = (EditText) findViewById(R.id.totalTipsInput); 
    waiter1Hours = (EditText) findViewById(R.id.waiter1Hours); 
    waiter2Hours = (EditText) findViewById(R.id.waiter2Hours); 
    waiter3Hours = (EditText) findViewById(R.id.waiter3Hours); 
    waiter4Hours = (EditText) findViewById(R.id.waiter4Hours); 

    tipsPerHourView = (TextView) findViewById(R.id.tipsPerHourView); 
    totalHoursView = (TextView) findViewById(R.id.totalHoursView); 
    barsCutView = (TextView) findViewById(R.id.barsCutView); 

    waiter1Pay = (TextView) findViewById(R.id.waiter1Pay); 
    waiter2Pay = (TextView) findViewById(R.id.waiter2Pay); 
    waiter3Pay = (TextView) findViewById(R.id.waiter3Pay); 
    waiter4Pay = (TextView) findViewById(R.id.waiter4Pay); 
    taxDepositView = (TextView) findViewById(R.id.taxDepositView); 

    Button calcBtn = (Button) findViewById(R.id.calcBtn); 
    calcBtn.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View view) { 

      double totalTips = Double.parseDouble(totalTipsInput.getText().toString()); 

      double cWaiter1Hours = Double.parseDouble(waiter1Hours.getText().toString()); 
      double cWaiter2Hours = Double.parseDouble(waiter2Hours.getText().toString()); 
      double cWaiter3Hours = Double.parseDouble(waiter3Hours.getText().toString()); 
      double cWaiter4Hours = Double.parseDouble(waiter4Hours.getText().toString()); 

      double resultTotalHours = cWaiter1Hours + cWaiter2Hours + cWaiter3Hours + cWaiter4Hours; 
      double resultBarsCut = (totalTips * 7)/100; 
      double resultTaxDeposit = resultTotalHours * 3; 
      double resultTipsPerHour = (totalTips - resultBarsCut - resultTaxDeposit)/resultTotalHours; 

      double resultWaiter1Pay = cWaiter1Hours * resultTipsPerHour; 
      double resultWaiter2Pay = cWaiter2Hours * resultTipsPerHour; 
      double resultWaiter3Pay = cWaiter3Hours * resultTipsPerHour; 
      double resultWaiter4Pay = cWaiter4Hours * resultTipsPerHour; 

      totalHoursView.setText(Double.toString(resultTotalHours)); 
      tipsPerHourView.setText(Double.toString(resultTipsPerHour)); 
      barsCutView.setText(Double.toString(resultBarsCut)); 

      waiter1Pay.setText(Double.toString(resultWaiter1Pay)); 
      waiter2Pay.setText(Double.toString(resultWaiter2Pay)); 
      waiter3Pay.setText(Double.toString(resultWaiter3Pay)); 
      waiter4Pay.setText(Double.toString(resultWaiter4Pay)); 

      taxDepositView.setText(Double.toString(resultTaxDeposit)); 


     } 
    }); 
} 

このような何かをしようとしたが、.LENGTH()でエラーが発生しました:

   if (double totalTips = Double.parseDouble(totalTipsInput.getText().toString()).length() < 1 || totalTipsInput = null) { 
       totalTips = 0 
      } else { 
       double totalTips = Double.parseDouble(totalTipsInput.getText().toString()); 
      } 
+0

あなたがそうのような何かを行うことができます:。 '文字列tmpStr = totalTipsInput.getText()のtoString(); double totalTips =(tmpStr.legnth()> 0)? Double.parseDouble(tmpStr):0.0; 'これをあなたの他のフィールドに合わせてください。 – Trinopoty

+0

'Double.parseDouble(" ")'空の文字列の例外? –

+0

'(waiter1Hours.getText!= null)'のようなものを試してみてください。 'EditText'の@Redman' getText() 'については、 – Redman

答えて

0

はあなたが確認するために、このような何かを行うことができますへの入力"parseDouble"は有効です:

double totalTips = 0; 
    Editable totalString = totalTipsInput.getText(); 
    if(totalString.length() > 0){ 
     totalTips = Double.parseDouble(totalString.toString()); 
    } 

"totalTips"フィールドにはユーザー入力が必要な場合は、有効な番号のみを入力できます。怠惰な方法は、try/catchをparseDoubleの周りに置くことで、誰かがdouble(つまり、空の文字列、文字、不正な数値)に解析できないものを入力するケースを処理することです。

残りのウェイター時間フィールドにも常に有効な値を入力するようユーザーに信頼しないことをお勧めします。入力を解析する前に、これらのフィールドで同様のチェックを行うことをお勧めします。

+0

働いてくれてありがとう! –

+0

良い。 @Kiskae、編集のおかげで。 –

1

使用あなたのクラスでこのメソッド:

public static Double returnDouble(EditText editText) 
    { 
     try { 
      if(editText.getText().toString().isEmpty()) 
      { 
       return 0d; 
      } 
      else 
      { 
       return Double.parseDouble(editText.getText().toString()); 
      } 
     } catch (NumberFormatException e) { 

      return 0d; 
     } 

    } 
関連する問題