Код Android продолжается даже после возврата - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть несколько правок и кнопка.По нажатию кнопки я делаю некоторые действия со значениями edittext.Я хочу проверить, все ли edittexts заполнены, прежде чем я продолжу.Поэтому я использую код в слушателе onclick

if("".equals(etLandSize.getText().toString()) || null == etLandSize.getText().toString())
    {
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();

        return;
    }

//followed by some actions.

Если вышеуказанное условие выполнится, я ожидаю, что метод вернется без каких-либо действий, используя return.

Моя проблема в том, что даже когда условие выполняется, строки, следующие за этим условием, выполняются, и я вижу NPE из журнала, поскольку поля пусты.

Если я прокомментирую все строкипосле этого состояния только тогда я вижу ожидаемый тост, и моя активность остается там, что является нормальным поведением.

Я что-то здесь не так делаю?

Альтернативой является то, что я могу поставить кодследующее условие в блоке else {}.Но просто интересно, почему я не могу использовать возврат.Извиняюсь, если я не осознаю какую-то основную ошибку.

Ответы [ 3 ]

2 голосов
/ 06 ноября 2011

Ваше состояние выглядит странно.

Я уверен, что null == etLandSize.getText().toString() никогда не будет правдой, и я бы использовал

etLandSize.getText().length() == 0

вместо "".equals(etLandSize.getText().toString(), поскольку использование "" позволяет избежать сравнения с nullздесь бесполезно - toString () не может вернуть null.

Итак, попробуйте следующее:

if (etLandSize.getText().length() == 0)
{
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();

    return;
}

Кстати: если ваш return; находится внутри блока try {}, то часть кода, расположенная в блоке finally{}, будет выполняться после него.

1 голос
/ 06 ноября 2011

Трудно ответить без дополнительной информации (где находится этот код? Кто вызывает эту функцию? И т. Д ...)

Как основное правило, когда вы обнаружите, что что-то базовое, например, returnсломан, это не причина проблемы.Маловероятно, что вам удалось обнаружить очень специфическую ошибку в JVM.

Если вы уверены, что условие if действительно выполняется, я предполагаю, что ваша функция вызывается дважды, и в одном из этих вызовов условиене соответствует действительности.

Итай.

0 голосов
/ 06 ноября 2011

Не используйте return внутри условных блоков или в середине методов. Всегда используйте возврат ТОЛЬКО в конце методов.

В вашем случае поместите ваш //, а затем некоторые действия в блок "else". Также вы можете проверить текст, рассмотрите возможность использования trim () и length () в возвращаемой строке.

...