Разница между getExtras (name) .getString и getIntent (). GetStringExtra (name) - PullRequest
7 голосов
/ 02 мая 2011

У меня есть некоторые сообщения об ошибках в моем приложении для Android, это исключение Nullpointerexception в onCreate () в Activity. Неудачный код - getIntent (). GetExtras (). GetStringExtra ("name"). (Nullpointerexception)

Это означает, что getExtras () каким-то образом является нулевым.Я уверен, что я устанавливаю дополнительное намерение в каждом месте, где я создаю намерение.Я не могу воссоздать его на моем эмуляторе на устройстве.Я думаю, что это произошло на моем реальном устройстве (но не во время отладки) после того, как я снова попытался открыть приложение, в то время как Android, вероятно, убил процесс и снова создал действие.Но не следует ли сохранить преднамеренные дополнения даже в этом сценарии?

Я попытался убить процесс на эмуляторе, снова вызвали onCreate и getExtras () вернул правильное значение.

Я заменил код на getIntent (). GetStringExtra ().Какая разница, кроме того, что он не выдаст исключение nullpointerexception, но все равно установит String как null.Есть ли какая-то другая разница?

Что может быть причиной?

Ответы [ 3 ]

8 голосов
/ 02 мая 2011

Intent.getStringExtra () возвращает значение NULL, если дополнений нет.Intent.getExtras () возвращает null, если нет никаких дополнительных функций, поэтому вам необходимо проверить это перед попыткой вызова getString () или других методов для него.

0 голосов
/ 05 мая 2011

Я обнаружил, что где-то еще в моем коде я создавал быстрые намерения, которые имели дополнительную строку []. Android HOME (и, возможно, другие части системы) не сохраняют строковые массивы, только примитивные дополнения (int, string, long, float ...). Но код, который вызывал проблемы, не использует ярлыки, это всего лишь простое действие, которое получает дополнительный массив строк. Возможно, пустые дополнения также были вызваны этой проблемой - приложение было убито ОС, а дополнения не могли быть сохранены. В этом случае Android не выдает никаких исключений.

Описывается Романом Гаем здесь: http://groups.google.com/group/android-developers/browse_thread/thread/7f2ce458bd5d112f/189e2b7b2b2532d7

Я задал здесь более конкретный вопрос: Дополнительная информация о намерениях потеряна после перезапуска?

0 голосов
/ 02 мая 2011

getIntent.getExtras () возвращает ноль в какой-то момент.getIntent (). getStringExtra (), скорее всего, закодирован для проверки на наличие нулевых дополнений и возврата нуля, если getExtras () равен нулю.Так называемая архитектура «без бросков».Если это так, это допустимое выполнение во время выполнения и не выдает исключение.вызов getStringExtra для нулевых дополнений не является допустимым выполнением во время выполнения и должен вызывать исключение.

Похоже, что существует путь, в котором getExtras () имеет значение null, поэтому вы можете кодировать это, проверяя нулевые дополнения.

...