Android: this.getApplication () возвращает нулевой указатель - PullRequest
12 голосов
/ 09 октября 2009

Я выполняю следующую строку в Activity, которая находится в том же приложении, но в другом пакете:

AppObject appObj = (AppObject)this.getApplication();
// FYI: AppObject is my extension class of Application.

Возвращает только нулевой указатель, а когда я перемещаю его в «основной» пакет и запускаю его, он возвращает ссылку на приложение, как и ожидалось.

Я определил активность в своем AndroidManifest.xml с полным именем класса, поскольку он находится в другом пакете: <activity android:name="com.foo.bar.TestActivity"></activity>


Обновление: Как указано в вопросе ниже, android:name="AppObject" уже был в теге <application> в AndroidManifest.xml

Ответы [ 4 ]

21 голосов
/ 10 мая 2011

Важно вызывать getApplication() в методе onCreate() действия, а не в конструкторе.

4 голосов
/ 09 октября 2009

Вам потребуется обновить тег приложения до AndroidManifest.xml с именем вашего класса, которое расширено от Application, с правильным именем пакета.

<application android:name=".AppObject">


Согласно тегу Application google docs, Базовый класс для тех, кому необходимо поддерживать глобальное состояние приложения. Вы можете предоставить свою собственную реализацию, указав ее имя в теге AndroidManifest.xml, что приведет к созданию экземпляра этого класса для вас при создании процесса для вашего приложения / пакета.

здесь

1 голос
/ 17 января 2011

Просто наткнулся на то же самое, после рефакторинга всего моего кода все еще возникла та же проблема, заметил, что я устанавливал локальную переменную mApplication в конструкторе, она должна идти в onCreate(), я думаю, все объекты в манифесте может быть создан первым до установки getApplication(), поэтому вам нужно вызвать getApplication() в или после вызова onCreate(). Не реорганизовал весь мой код обратно, чтобы увидеть, работает ли это для разных пакетов (вздох).

0 голосов
/ 15 мая 2014

Я думаю, это не указатель null, но ваша функция, которую вы хотите использовать следующей в классе AppObject, может быть неправильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...