Сравнить с null, не работает в java

#java #android #sqlite

#java #Android #sqlite

Вопрос:

Я пытался сравнить с null условием if, но оно не работает и всегда переходит в Else. Ниже приведен код,

 String authEmail = cursor.getString(cursor.getColumnIndexOrThrow("AUTHOR_EMAIL"));
Log.i(gtag, "author email => "   authEmail);
    if (authEmail == null ) {
        Log.i(gtag, "in author check - IF NULL");
     } else {
            Log.i(gtag, "in author check - ELSE ");                 
     }
 

Вот cursor результат запроса базы данных SQLite и AUTHOR_EMAIL имя столбца. Logcat показывает адрес электронной почты автора как null, но все равно он входит в ELSE. Ниже приведен Logcat:

 06-24 15:30:55.307: I/GCA-Abs-Con(1282): author email => foo@bar.de
06-24 15:30:55.307: I/GCA-Abs-Con(1282): in author check - ELSE 
06-24 15:30:55.357: I/GCA-Abs-Con(1282): author email => null
06-24 15:30:55.357: I/GCA-Abs-Con(1282): in author check - ELSE 
 

3-я строка logcat показывает authorEmail null , но все равно она входит else .

Я тоже пытался authEmail.equals(null) , но это тоже не сработало.

Как я должен изменить условие if, чтобы проверить на null идеально?
Заранее спасибо.

Комментарии:

1. попробуйте if(authEmail.equals(null));{ }

2. он использует authEmail как строку «null» вместо нулевого объекта

3. Нет, вы не используете equals для проверки null.

4. Пробовал также equals, но не сработало

5. Похоже, что authEmail — это строка «null», а не значение null. Как следует из приведенных ниже ответов, выполните equals . Я бы предложил ответ DarkDusts, поскольку его ответ не вызовет никаких исключений NullPointerExceptions

Ответ №1:

Чтобы проверить, имеет ли поле базы данных значение SQL NULL, используйте метод isNull курсора:

 int index = cursor.getColumnIndexOrThrow("AUTHOR_EMAIL");
if (cursor.isNull(index)) {
    ...
} else {
    String authEmail = cursor.getString(index);
    ...
}
 

Комментарии:

1. Сделал это — на самом деле, это было самое непосредственное решение.

Ответ №2:

попробуйте это

   if (authEmail.equals("null")) {
 

вместо

   if (authEmail == null ) {
 

Используется .equals() для сравнения строк

Комментарии:

1. я думаю authEmail.equals(null) , должно быть authEmail.equals("null")

2. Моя Java устарела, но разве вы не получаете исключение, если authEmail есть null , и поэтому пытаетесь вызвать метод on null ?

3. Спасибо! Я попробовал authEmail.equals(null), но это не сработало, но когда я попробовал authEmail.equals («null»), это сработало! Это потому null , что здесь должно рассматриваться как значение?

4. @ShumailMohy-ud-Din именно вы добавили null

5. а также, было бы лучше проверять "null".equals(authEmail)

Ответ №3:

Сделайте это так:

 if (authEmail == null || authEmail.equals("null")) {
    ...
}
 

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

Комментарии:

1. Я попробовал authEmail.equals(null), но это не сработало, но когда я попробовал authEmail.equals («null»), это сработало! Это потому null , что здесь должно рассматриваться как значение?

2. Нет, это потому, что переменная содержит текст. И этот текст оказывается null . Как в String text = "null";

Ответ №4:

Используйте это

 if (authEmail == null || authEmail.equalsIgnoreCase("null")) {
  // handle null case
} else {
  // handle other case
}