2010-10-16 8 views
8

¿Puede alguien explicarme por qué el controlador Android "Catch" no inicializará un objeto Exception? Cuando se produce un error y mi código intenta inicializar un objeto de excepción, es SIEMPRE NULO.La excepción es NULL siempre

Lo anterior no tiene sentido para mí porque la excepción siempre debe inicializar el período del objeto Excepción. Nunca debe ser nulo si ocurre un error.

Soy bastante nuevo en el Eclipse Android IDE/SDK y estoy seguro de que no tengo todo configurado al 100%. Sin embargo, este tipo de funcionalidad me parece que debería funcionar todo el tiempo, no después de la configuración.

+1

¿Puedes mostrar la parte relevante de tu código? ¿Qué evidencia ha utilizado para llegar a la conclusión de que la excepción es nula? ¿Cómo observaste esta evidencia? –

+0

Hola, tengo la siguiente configuración de controlador: catch (excepción ex) { \t System.out.println ("ERROR: \ n \ n" + ex.toString()); } Cuando ejecuto la depuración, la excepción siempre es NULL ... independientemente de cuál sea el error. Nunca inicializa – John

+0

Tiene un punto de interrupción dentro del bloque catch, y ex es nulo? Encuentro que es difícil de creer ... Si ex era nulo, su declaración impresa arrojaría una excepción de puntero nulo, ¿eso es lo que sucede? –

Respuesta

6

Una posible causa es que usted está tratando de hacer una conexión de red en el hilo principal, que funciona-2.3.3 pre/nido de abeja (nivel SDK < 10 por ejemplo) bien, pero será lanzado como un

android.os.NetworkOnMainThreadException

desde el nivel del SDK 10.

Comprobar esto: http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

El problema es que Eclipse no sabe realmente acerca de esta excepción (ya que es lanzado de forma condicional basada en diferentes niveles SDK Eclipse así que probablemente no se puede obtener una instancia correcta de esta excepción, que explica por qué su objeto de excepción siempre es NULL)

Solución: cree un hilo separado o use AsyncTask para realizar su solicitud de conexión de red.

+0

¿Cómo es posible invocar el manejador de excepciones sin una instancia de la excepción? El código del manejador de excepciones debe probar efectivamente 'throwwnException instanceof CatchException', y sin una instancia de la excepción que fallará. –

Cuestiones relacionadas