2013-12-01 4 views
1

У меня есть jSonObject с парами значений ключей, и я хочу разобрать его на ContentValues. Во время разбора я хочу определить, что значение равно null, как вы можете видеть на картинке, значение равно null, но все же оно не получает catch в инструкции if. Поскольку это json и может быть pasing null в качестве строки, я пытался использовать value.equals («null»), но ни один из них не работал.Java, не признающий нулевое значение в jSonObject

debug info

if (value == null | value. equals("null") || tableField.getType() == FIELD_TYPE_NULL) { 
    DO SOME CODE 
} 

Что случилось?

+0

'value == null | стоимость. equals ("null") 'если значение равно" null ", а значение null не будет стоить. equals ("null") 'throw NPE? Я думаю, что это должно быть написано как «null» .equals (value) ' – Nishant

+0

Вы печатали значение ** значение ** в консоли? Попробуйте ** System.out.println ("Значение:" + значение + ":"); ** и покажите мне точный результат. – Ajeesh

+0

Да, я сделал. System.out.println ("value is" + value) prints Значение имеет значение null. когда он должен печатать 'значение is', поэтому я попробовал' value.equals («null») ' – spacebiker

ответ

1

Общим способом получения значений из jsonobject является метод getString(). Поэтому вы должны использовать value = jsonObject.getString (columnName);, чтобы присвоить значение значение переменная. Затем вам необходимо проверить состояние как

if (value == null || value. equals("null") || tableField.getType() == FIELD_TYPE_NULL) 
{ 

} 
+0

Это сделало это, я еще не понимаю, почему это не остановилось в одном из двух утверждений '(значение == null || value.equals (" null ")', 'get' должно возвращать объект, поэтому он должен остановиться хотя бы на 'value == null', но если по какой-то причине он разбирался как строка, он должен останавливаться в' value.equals («null») '. В любом случае, это решение работало как шарм. – spacebiker

3

Ваш первый «OR» - это всего лишь одна труба '|' вместо двойной трубы '||'

if (value == null || value.equals("null") || tableField.getType() == FIELD_TYPE_NULL) { 
    DO SOME CODE 
} 
+1

Да, ' Оператор OR' в java может быть однотрубным или двойным, если один, и первый оператор верен, он не будет продолжать проверять следующий. Таким образом, я исключаю исключение nullpointer. – spacebiker

+0

@ Xabier Извините, это близко, но не правильно. | является побитовым оператором ИЛИ, а не логическим оператором ИЛИ. –

+1

@ Xabier см. Http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html для справки. –

0

Вы упускаете в вас один | первое условие

+1

Да, оператор 'OR' в java может быть однотрубным или двойным, если он одиночный, и первый оператор истинен, он не будет продолжать проверять следующий. Таким образом, я исключаю исключение nullpointer. – spacebiker

1

Попробуйте

if (value == null || value.equals("null") || tableField.getType() == FIELD_TYPE_NULL) { 
    DO SOME CODE 
} 
+0

StringUtils по умолчанию не работает в андроид-студии. Я бы предпочел не добавлять дополнительные классы. По крайней мере, просто для проверки, является ли значение нулевым. Но все равно спасибо. – spacebiker

1

Попробуйте использовать функцию value.isNullObject(). Он возвращает true, если объект имеет значение NULL.

+0

value.isNullObject не существует!? – spacebiker

1
if (value == null | value. equals("null") || tableField.getType() == FIELD_TYPE_NULL) { 
    DO SOME CODE 
} 

Хотя в вашем случае, если значение «нуль» выше, оказываются

value == null | value. equals("null")// first condition in if statement --->if(false|true)---> if(true) 

вы используете немного мудрым или не логическое ИЛИ

Это должно быть

if (value == null || value. equals("null") || tableField.getType() == FIELD_TYPE_NULL) { 
     DO SOME CODE 
    } 
+0

Я попробовал это, как предложил @netinept, но это не сработало. Спасибо за ваше объяснение. – spacebiker

Смежные вопросы