Android-приложение ловит нежелательные исключения - PullRequest
0 голосов
/ 18 июля 2011

Я пишу простое приложение, которое позволяет пользователю вводить свой доход и вычитает налог, а затем сохраняет сумму в файле для дальнейшего использования.Проблема в том, что, если я попытаюсь ввести что-либо в editText 'postTax', он выдаст нижнее исключение.Очевидно, я делаю что-то глупое с моей логикой, но кто-нибудь может увидеть проблему?

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();
    }

1 Ответ

2 голосов
/ 18 июля 2011

Это вполне ожидаемо.Строка:

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

может выдать NumberFormatException, если число, введенное в postTax edit, не разбирается в double.Нижний catch является ближайшим для захвата этого исключения.

Поместите эту строку (вместе с несколькими последующими) в блоке try-catch чуть ниже, чтобы исключение было поймано там.(Вы, вероятно, захотите изменить сообщение о тосте на что-то вроде «Не удалось обработать стоимость после уплаты налога»).

...