2009-10-09 16 views
11

sto correndo la seguente linea in un'attività, che è all'interno della stessa applicazione, ma in un pacchetto differente:Android: this.getApplication() restituisce puntatore a NULL

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

restituisce solo un puntatore nullo , mentre quando lo sposto nel pacchetto "principale" ed eseguo da lì, restituisce il riferimento dell'applicazione come previsto.

ho definito l'attività nel mio AndroidManifest.xml con il nome completo della classe qualificato, dal momento che è in un altro pacchetto: <activity android:name="com.foo.bar.TestActivity"></activity>

Tutte le idee di quello che ho a che fare di diverso?

Grazie


Aggiornamento: come suggerito in una domanda qui sotto android:name="AppObject" era già nella <application> tag del AndroidManifest.xml

risposta

4

È necessario il tag applicazione di aggiornamento per AndroidManifest.xml con il tuo nome della classe, che viene esteso dall'applicazione, con il nome del pacchetto corretto.

<application android:name=".AppObject"> 


Come per Applicazione tag google docs, Classe di base per coloro che hanno bisogno di mantenere lo stato di applicazione globale. Puoi fornire la tua implementazione specificando il suo nome nel tag di AndroidManifest.xml, che farà sì che quella classe venga istanziata per te quando viene creato il processo per la tua applicazione/pacchetto.

here

+1

Scusa, ho dimenticato di dirlo nella mia domanda. Ma l'ho già avuto nel mio Manifesto. – znq

1

appena eseguito nella stessa cosa, dopo aver rifattorizzata tutto il mio codice ha ancora lo stesso problema, si accorse che stavo impostando la variabile locale mApplication nel costruttore, dovrebbe andare in onCreate(), credo tutti gli oggetti nel manifest possono essere costruiti prima che l'installazione sia getApplication(), quindi è necessario chiamare getApplication() in o dopo onCreate(). Non ho refactored tutto il mio codice di nuovo per vedere se questo funziona per diversi pacchetti (sigh).

20

È importante chiamare getApllication() nel metodo onCreate() dell'attività, non nel costruttore.

+0

Punto molto importante, non menzionato nella documentazione. Molte grazie! – Stan

+0

interessante, questa chiamata getApplication prima di onCreate sembrava funzionare per un collega bene su una nota 3 di Samsung Galaxy, ma sul mio nesso 5 ho visto un crash. – Sam

+0

Grazie mille! Ero già in uno stato disperato perché avevo NullPointerExceptions in tutti i modi in cui ho provato ad accedere a SharedPreferences. Questo l'ha risolto per me! Grazie! –

-1

Penso, non è un puntatore null, ma la funzione che si desidera utilizzare successivamente nella classe AppObject potrebbe essere errata.

+0

Per favore, spiega. Perchè la pensi così? – naXa

+0

Ho incontrato il tuo errore una volta, quando controllo il codice e trovo questo motivo, sono nuovo in questo campo e spero che questo ti sia d'aiuto. – user3641050

Problemi correlati