Android: проверка на наличие пустых полей EditText - PullRequest
0 голосов
/ 01 апреля 2012

Я работаю над проектом Android для личного интереса.Я работаю с несколькими полями EditText, и все должны быть заполнены с ненулевым десятичным или целым числом.Я указал в моем файле XML, что он принимает только цифры или десятичные числа.Я не слишком знаком с Java, но я читал метод try / catch и то, как он используется, когда я пытаюсь проанализировать каждое из значений EditText как double.Сейчас все работает нормально, когда все поля заполнены, но я хочу добавить какую-то обработку исключений, чтобы, если по ошибке вы забыли ввести поле, приложение отобразило сообщение об ошибке вместо сбоя.Это звучит как много, но я думаю, что это довольно незначительно.Вот мой метод расчета, который я использую.Спасибо за ваш отзыв:)

public static void calculate() {

    NumberFormat formatter1 = new DecimalFormat("#0.00");
    NumberFormat formatter2 = new DecimalFormat("#0.00000");

    Editable evG1F = etG1F.getText();
    Editable evG1U = etG1U.getText();
    Editable evG2F = etG2F.getText();
    Editable evG2U = etG2U.getText();
    Editable evG3F = etG3F.getText();
    Editable evG3U = etG3U.getText();
    Editable evWin = etWin.getText();

    double g1f = 0.0;
    double g1u = 0.0;
    double g2f = 0.0;
    double g2u = 0.0;
    double g3f = 0.0;
    double g3u = 0.0;
    double p1odds, p2odds, p3odds, p4odds, p5odds, p6odds, p7odds, p8odds;
    double totalParlay, profit, finalOdds, risk;

    win = 0.0;

    g1f = Double.parseDouble(evG1F.toString());
    g1u = Double.parseDouble(evG1U.toString());
    g2f = Double.parseDouble(evG2F.toString());
    g2u = Double.parseDouble(evG2U.toString());
    g3f = Double.parseDouble(evG3F.toString());
    g3u = Double.parseDouble(evG3U.toString());
    win = Double.parseDouble(evWin.toString());

    p1odds = (1 / (g1f * g2f * g3f));
    p2odds = (1 / (g1f * g2f * g3u));
    p3odds = (1 / (g1f * g2u * g3f));
    p4odds = (1 / (g1f * g2u * g3u));
    p5odds = (1 / (g1u * g2f * g3f));
    p6odds = (1 / (g1u * g2f * g3u));
    p7odds = (1 / (g1u * g2u * g3f));
    p8odds = (1 / (g1u * g2u * g3u));

    totalParlay = (p1odds + p2odds + p3odds + p4odds + p5odds + p6odds
            + p7odds + p8odds);
    profit = 1 - totalParlay;
    finalOdds = ((profit / totalParlay) + 1);
    risk = (win / (finalOdds - 1));

    p1 = ((risk + win) * p1odds);
    p2 = ((risk + win) * p2odds);
    p3 = ((risk + win) * p3odds);
    p4 = ((risk + win) * p4odds);
    p5 = ((risk + win) * p5odds);
    p6 = ((risk + win) * p6odds);
    p7 = ((risk + win) * p7odds);
    p8 = ((risk + win) * p8odds);

    sRisk = risk;
    sFinalOdds = finalOdds;

    tvRisk.setText("$" + formatter1.format(Parlay.sRisk));
    tvOdds.setText("" + formatter2.format(Parlay.sFinalOdds));

}

1 Ответ

1 голос
/ 01 апреля 2012

Вы можете заключить свои операторы parseDouble() в блок try / catch:

    try {
        g1f = Double.parseDouble(evG1F.getText().toString());
        g1u = Double.parseDouble(evG1U.getText().toString());
        g2f = Double.parseDouble(evG2F.getText().toString());
        g2u = Double.parseDouble(evG2U.getText().toString());
        g3f = Double.parseDouble(evG3F.getText().toString());
        g3u = Double.parseDouble(evG3U.getText().toString());
        win = Double.parseDouble(evWin.getText().toString());
    } catch (NumberFormatException e) {
        // Error handling here
    }

Исключение будет выдано, если оно не является допустимым двойным числом, или если строка пуста. Я добавил getText() перед toString() при каждом вызове, потому что вам действительно не нужно объявлять эти Editable объекты далее (поскольку вы все равно используете getText() для них).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...