2011-08-07 10 views
16

Tengo algunos problemas con mi emulador de Android 3.1. No puedo obtener mi archivo XML.Android http excepción de conexión

protected InputStream getInputStream() { 
    try { 

     return feedUrl.openConnection().getInputStream(); 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } 
} 

Aquí está la localización de fallos:

08-07 22:34:26.657: ERROR/AndroidRuntime(563): Caused by: android.os.NetworkOnMainThreadException 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at java.net.InetAddress.lookupHostByName(InetAddress.java:477) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at java.net.InetAddress.getAllByName(InetAddress.java:249) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:304) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:523) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at maps.test.BaseFeedParser.getInputStream(BaseFeedParser.java:30) 
08-07 22:34:26.657: ERROR/AndroidRuntime(563):  at maps.test.DomFeedParser.parse(DomFeedParser.java:23) 

Creo que no me puedo conectar a Internet, incluso con <uses-permission android:name="android.permission.INTERNET"/>. Pero al mismo tiempo, la API de Google está funcionando muy bien.

+0

posible duplicado de [android.os.NetworkOnMainThreadException] (http://stackoverflow.com/questions/6343166/android -os-networkonmainthreadexception) – laalto

Respuesta

52

causada por: android.os.NetworkOnMainThreadException

En nido de abeja que se han ido y poner en una trampa para atrapar a la gente tratando de hacer potencialmente operaciones de red que requieren mucho tiempo en el hilo principal.

Desde: http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

La excepción que se produce cuando una aplicación intenta realizar una operación de red en su hilo principal.

Esto solo se aplica a las aplicaciones orientadas al Honeycomb SDK o superior. Las aplicaciones que se dirigen a versiones anteriores de SDK pueden hacer redes en sus hilos de bucle de eventos principales, pero se desaconseja en gran medida. Ver el documento Designing for Responsiveness.

Ver también StrictMode.

(Tenga en cuenta que usted podría haber encontrado este sí mismo haciendo una búsqueda en Internet sobre la excepción de la parte superior de los mensajes de error que posteaste al instante.)

Debido a cosas como buscar un nombre de host puede tomar una cantidad de tiempo larga y algo indeterminada, no se deben llamar desde las funciones de eventos en el hilo principal que se requieren para regresar rápidamente (como en unos pocos milisegundos). Si una de estas funciones tarda demasiado en regresar, Android pierde la capacidad de enviar mensajes al programa y puede aparecer el temido cuadro de diálogo Application Not Responding.

Debería mover sus operaciones de red (al menos las que requieren esperar a que se produzca un resultado o que se bloquee un bloqueo para poder enviar más) a un hilo. Si las operaciones de la red provienen de una parte del código API, probablemente no deberías llamar eso en el hilo principal.

+0

recibo el mismo error pero tengo mi trabajo http en un hilo separado, es decir, tarea asincrónica. ¿Qué pudo haber ido mal? ¿podrías guiarme en esto? –

+0

Probablemente no haya utilizado la tarea asincrónica correctamente y no haya puesto todas las operaciones de red en el método de fondo, o haya llamado al método de fondo desde el hilo de la interfaz de usuario en lugar de iniciar la tarea de sincronización. Cuando examine su rastro de pila, descubrirá cuál. –

+0

comprobé a fondo, se llama a la llamada http en el método doInBackground() que se llama desde el comando .execute(), aún así la ruta devuelve: org.apache.harmony.luni.internal.net.www.protocol.http. FixedLengthInputStream @ 405259f0 –

4

¿Tiene

<uses-permission android:name="android.permission.INTERNET" /> 

en su manifiesto de Android? Debe estar por encima de su etiqueta application

+0

Ya lo agregué, no olvide que dije google API funciona muy bien. – oueslatibilel

+0

pero cree que la API de Google puede funcionar sin conectarse? beceause MyLocationOverlay no funciona! pero puedo Acceso a los mapas y añadir superposición estática <-utiliza el permiso android: name = "android.permission.INTERNET" /> – oueslatibilel

+0

Trate de mover la etiqueta de usos en permisos por encima de la aplicación etiqueta, por lo que es Pikaling

3

Esta excepción solo se aplica a las aplicaciones orientadas al Honeycomb SDK o superior. es posible que oriente su SDK igual o superior al nivel API 11. Sólo cambia a nivel de la API 8 u otro nivel por debajo de 11. api su problema puede ser resuelto

Here es el mismo problema, se había resuelto por el cambio nivel de api

Espero que te ayude. !!

+1

api de segmentación por debajo de 11 no funciona. – logray

+1

En realidad, tal como lo entendí, esta excepción se realiza a propósito para evitar operaciones de red que consumen mucho tiempo en el hilo principal. Entonces, el problema no es la API a la que apunta, sino la forma en que maneja las operaciones de red;) – AgentKnopf

0

Elimina el android: targetSdkVersion "version_number" de tu AndroidManifest.xml

me lo quitó y mi problema resuelto

15

Uso de tareas o asíncrono

if (android.os.Build.VERSION.SDK_INT > 9) 
{ 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
} 
+0

Esta es una gran sugerencia para todo tipo de evaluación rápida. No tiene que perder tiempo con los detalles de subprocesos/asincrónicos. ¡Gracias! –

Cuestiones relacionadas