Ответ 1
Очень важно вызвать getApllication()
в методе onCreate()
, а не в конструкторе.
Я запускаю следующую строку в 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
Очень важно вызвать getApllication()
в методе onCreate()
, а не в конструкторе.
Тег приложения update необходимо добавить в AndroidManifest.xml с именем вашего класса, которое добавлено из приложения с соответствующим именем пакета.
<application android:name=".AppObject">
Согласно тегу Приложение google docs, базовый класс для тех, кто должен поддерживать состояние глобального приложения. Вы можете предоставить свою собственную реализацию, указав ее имя в своем теге AndroidManifest.xml, что приведет к тому, что этот класс будет создан для вас, когда будет создан процесс для вашего приложения/пакета.
Просто запустите одно и то же, рефакторинг всего моего кода по-прежнему получил ту же проблему, заметил, что я устанавливаю локальную переменную mApplication
в конструкторе, она должна идти в onCreate()
, я думаю, что все объекты в манифесте может быть сконструирован сначала до getApplication()
, поэтому вам нужно вызвать getApplication()
в или после того, как был вызван onCreate()
. Не переработал весь мой код обратно, чтобы увидеть, работает ли это для разных пакетов (вздох).
Я думаю, что это не указатель null
, но ваша функция, которую вы хотите использовать следующей в классе AppObject
, может быть, неверна.