2014-05-02 4 views
4

У меня есть условие if, на котором оценивается адрес электронной почты. Я проверяю 2 вещиЕсли условия не закорачиваются правильно

  • Он имеет символ «@»
  • После первого знака @, это заканчивается «gmail.com».

Мое понимание короткого замыкания заключается в том, что если первое условие в операторе OR (||) истинно, то второе не будет оцениваться. И все же я получаю NullPointerException, потому что второй оператор действительно оценивается (я его протестировал).

Что я не понимаю о коротком замыкании здесь?

Соответствующий код приведен ниже:

FYI: emailtext от элемента EditText и в этом случае "notavalidemail"

String[] split = emailtext.split("@", 2); 
final AlertDialog.Builder notifier = new AlertDialog.Builder(this); 
Log.i("GetToken","Split[0]=" + split[0] + "; length=" + split.length); 

if (split.length == 1 || !split[1].equals("gmail.com")) { 
    //Tell the user they didn't enter a correct gmail 
} 

Бревно в коде возвращает это:

05-02 13:51:16.447 27553-27553/com.farmsoft.lunchguru.app I/GetToken﹕ Split[0]=notavalidemail; length=1 
+3

Как это может привести к исключению NullPointerException? Если это действительно так: 'length = 1', вы должны получить IndexOutOfBoundsException; но это невозможно, '||' действительно короткое замыкание. –

+2

Можете ли вы представить воспроизводимый пример для нас с помощью ввода, который вызывает эту проблему? Таким образом, мы можем запустить его самостоятельно (и что более важно: часто это помогает вам найти его самостоятельно, потому что вы изолируете проблемную область). –

+4

Ну, очевидно, 'split [1]' is 'null'. – 2rs2ts

ответ

0

Используйте этот код, чтобы избежать проблем.

String[] split = emailtext.split("@", 2); 

    final AlertDialog.Builder notifier = new AlertDialog.Builder(this); 
    Log.i("GetToken","Split[0]=" + split[0] + "; length=" + split.length); 

    boolean errorMail = true; 
    if(split.length == 2) 
    { 
     if(split[1].equals("gmail.com")) 
     { 
      errorMail = false; 
     } 
    } 
    if(errorMail) 
    { 
     // Mail error 
    } 
Смежные вопросы