2009-10-09 15 views
11

estoy ejecutando la siguiente línea en una actividad, que está dentro de la misma aplicación, pero en un paquete diferente:Android: this.getApplication() devuelve puntero NULL

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

sólo devuelve un puntero nulo , mientras que cuando lo muevo al paquete "principal" y lo ejecuto desde allí, devuelve la referencia de la aplicación como se esperaba.

he definido la actividad en mi AndroidManifest.xml con el nombre completo de clase completo, ya que es en otro paquete: <activity android:name="com.foo.bar.TestActivity"></activity>

¿Alguna idea de lo que he de hacer diferente?

Gracias


Actualización: como se sugiere en la pregunta a continuación android:name="AppObject" ya se encontraba en la etiqueta de la <application> AndroidManifest.xml

Respuesta

4

Es necesario la etiqueta de aplicación de actualización de AndroidManifest.xml con su nombre de clase, que se extiende desde la Aplicación, con el nombre del paquete adecuado.

<application android:name=".AppObject"> 


Según Aplicación etiqueta google docs, Clase base para aquellos que necesitan para mantener el estado de aplicación global. Puede proporcionar su propia implementación especificando su nombre en la etiqueta de AndroidManifest.xml, lo que hará que la clase se cree una instancia cuando se crea el proceso para su aplicación/paquete.

here

+1

Lo siento, olvidé mencionar eso en mi pregunta. Pero ya tuve eso en mi Manifiesto. – znq

1

Sólo tiene que ejecutar en el mismo, después de haber refactorizado todo mi código todavía tiene el mismo problema, se dio cuenta de que yo estaba sentado el mApplication variable local en el constructor, que debe ir en el onCreate(), creo todos los objetos en el manifiesto se pueden construir primero antes de configurar getApplication(), por lo que debe llamar al getApplication() en o después de que se haya llamado al onCreate(). No refactoreé todo mi código nuevamente para ver si esto funciona para diferentes paquetes (suspiro).

20

Es importante llamar al getApllication() en el método onCreate() de la actividad, no en el constructor.

+0

Punto muy importante, no mencionado en la documentación. ¡Muchas gracias! – Stan

+0

curiosamente, esta llamada a getApplication antes de onCreate parecía funcionar para un colega muy bien en una nota de Samsung Galaxy 3, pero en mi nexo 5 vi un crash. – Sam

+0

¡Muchas gracias! Ya estaba en un estado desesperado porque tenía NullPointerExceptions en todos los sentidos que traté de obtener en SharedPreferences. ¡Esto lo resolvió para mí! ¡Gracias! –

-1

Creo que no es un puntero null, pero es posible que su función que desea utilizar a continuación en la clase AppObject sea incorrecta.

+0

Por favor, explica. ¿Por qué piensas eso? – naXa

+0

He encontrado su error una vez, cuando reviso el código y encuentro esta razón, soy nuevo en este campo y espero que esto sea útil para usted. – user3641050