2012-03-15 17 views
12

Sto tentando di gestire le eccezioni nella mia applicazione. Sto cercando di registrare l'eccezione, quindi uso Toast per avvisare l'utente che si è verificato un problema. Ho trovato questo lavoro in tutte le mie classi che estende l'attività.Contesto Android all'esterno della classe Attività

Tuttavia, in qualsiasi classe che non svolge attività estesa non è possibile utilizzare il metodo toast perché non è possibile ottenere il contesto corrente. C'è un modo semplice per aggirare questo o dovrebbe estendere tutta l'attività della mia classe?

+0

In particolare quali altre strutture stai lavorando con ? Molti di loro hanno già un contesto o ottengono un contesto passato ad essi ad un certo punto. – FoamyGuy

+0

È possibile rendere contesto un campo membro e impostare nel costruttore. Ma questo potrebbe portare a perdite di memoria, quindi usare con cautela (evitare riferimenti statici a Context). – j0ntech

+0

Ho due classi: 1) RegistrationScreen che estende Activity. 2) SocketClient che non estende l'attività. Quando un utente invia un modulo in RegistrationScreen crea un nuovo oggetto SocketClient, che registra tramite una connessione socket (il bit che genera IOException). In caso di successo, SocketClient restituisce i valori alla classe RegistrationScreen, ma è quando non ha successo che sto lottando. Dovrei semplicemente fare SocketClient lanciare le eccezioni e catturarle in RegistrationScreen? – Joseph

risposta

15

Basta passare Contesto quando si chiama Non-Activity classe dalla chiamata Classe di attività come

YourNonActivtyClass obj = new YourNonActivtyClass(Activity.this); 
+1

Grazie. Solo un problema però, quando si utilizza quanto sopra, compare "Nessuna istanza di inclusione del tipo L'attività è accessibile nell'ambito". Questo è all'interno della classe che estende l'attività. – Joseph

+0

Prima di tutto la classe di attività Android è chiamata e quindi è possibile chiamare qualsiasi classe senza Attività quindi nessun problema nel codice sopra per me .... –

+0

Non è un contesto un oggetto molto PESANTE essere post in questo modo? – Wooff

-13

messaggi Toast dovrebbe funzionare nel contesto dell'applicazione, cioè

Toast.makeText(getApplicationContext(), ...); 
+2

Se non è all'interno di un attività, quindi potrebbe non esserci un metodo getApplicationContext(). Inoltre non è necessario utilizzare questo metodo. L'oggetto attività stesso è un contesto. Quindi usando YourActivityName.questo funzionerà bene invece di getApplicationContext(); – FoamyGuy

Problemi correlati