2012-03-15 22 views
12

Estoy tratando de manejar excepciones en mi aplicación. Intento registrar la excepción y luego usar Toast para alertar al usuario de que hubo un problema. Tengo este hallazgo de trabajo en toda mi clase que extiende la Actividad.contexto de Android fuera de la clase de actividad

Sin embargo, en cualquier clase que no tenga actividad extendida no puedo usar el método toast ya que no puedo obtener el contexto actual. ¿Hay una manera simple de evitar esto o toda la actividad de mi clase debe extenderse?

+0

Específicamente qué otras estructuras estás trabajando con ? Muchos de ellos ya tienen un contexto o les dan un contexto en algún momento. – FoamyGuy

+0

Puede hacer que el contexto sea un campo miembro y establecerlo en el constructor. Pero esto podría provocar pérdidas de memoria, por lo que debe usarse con precaución (evite las referencias estáticas al contexto). – j0ntech

+0

Tengo dos clases: 1) RegistrationScreen que extiende la actividad. 2) SocketClient que no extiende la actividad. Cuando un usuario envía un formulario en RegistrationScreen crea un nuevo objeto SocketClient, que se registra a través de una conexión de socket (el bit que arroja una IOException). Si tiene éxito, el SocketClient devuelve valores a la clase RegistrationScreen, pero es cuando no es exitoso que estoy luchando. ¿Debo hacer que SocketClient arroje las excepciones y las capture en RegistrationScreen? – Joseph

Respuesta

15

Usted sólo tiene que pasar Contexto Cuando se llama a Non-Activity clase de la llamada clase de actividad como

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

Gracias. Solo un problema, cuando uso lo anterior, aparece "No se puede acceder a ninguna instancia adjunta del tipo Actividad". Esto es desde dentro de la clase que extiende la Actividad. – Joseph

+0

En primer lugar, la clase de actividad de android es call y luego puedes llamar a cualquier clase sin Activity para que no haya ningún problema en el código de arriba ... –

+0

¿El contexto no es un objeto MUY PESADO para publicarse así? – Wooff

-13

mensajes Toast debe trabajar dentro del contexto de aplicación, es decir

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

Si no está dentro de un actividad, entonces puede que no haya un método getApplicationContext(). Además, no es necesario utilizar este método. El objeto de actividad en sí es un contexto. Entonces, usar YourActivityName.this funcionará bien en lugar de getApplicationContext(); – FoamyGuy

Cuestiones relacionadas