HttpResponse usando android issue: ejecutar siempre causa excepción?

He estado trabajando en un proyecto de Android y estoy en un punto en el que quiero pedirle a alguna API información. Parece que esto debería ser muy básico!

Aquí está la esencia general de mi código:

private InputStream retrieveStream2(String url) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet getRequest = new HttpGet(url); System.out.println("getRequest == " + getRequest); try { HttpResponse getResponse = client.execute(getRequest);//here is teh problem final int statusCode = getResponse.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url); return null; } HttpEntity getResponseEntity = getResponse.getEntity(); return getResponseEntity.getContent(); } catch (Exception e) { getRequest.abort(); Log.w(getClass().getSimpleName(), "Error for URL, YO " + url, e); } return null; } 

Donde url variable es la cadena "http://search.twitter.com/search.json?q=javacodegeeks".

Como se puede ver, hay alguna información agradable de JSON en ese sitio; Mi problema es que cada vez que se llama 'client.execute (getRequest);', el programa lanza y captura una excepción. ¡Inútil!

He escuchado dos cosas:

1) ¡Usted tiene que fijar el permiso para que el emulador / dispositivo utilice el Internet! – Creo que cubrí esto, pero tal vez lo hice mal! En el androidmanifest.xml que agregué

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

Así que ahí está eso.

2) (que no estoy tan seguro acerca de) no se puede iniciar un hilo de "networking" dentro de un hilo "ui". No estoy completamente seguro de lo que esto significa, pero seguí adelante y seguí algunos tutoriales sobre Android Threads, Handlers y AsyncTasks. Aquí: Por favor, echa un vistazo al código bajo el tutorial AsyncTask, que he seguido:

Http://www.vogella.de/articles/AndroidPerformance/article.html

Después de seguir junto con el tutorial AsyncTask, descubrí que todavía tenía el mismo problema–

La línea: HttpGet httpGet = new HttpGet (url) siempre lanzó una excepción, como antes.

Aquí está el logcat de mi intento con el tutorial de subproceso anterior:

 02-27 20:43:28.565: I/ActivityManager(92): START {cmp=com.Prometheus.R1/.JsonParsingActivity} from pid 574 02-27 20:43:28.565: W/WindowManager(92): Failure taking screenshot for (180x300) to layer 21010 02-27 20:43:28.896: I/System.out(574): pre execute 02-27 20:43:29.236: I/ActivityManager(92): Displayed com.Prometheus.R1/.JsonParsingActivity: +638ms 02-27 20:43:29.329: I/ARMAssembler(35): generated scanline__00000077:03010104_00008001_00000000 [ 89 ipp] (110 ins) at [0x40fad6a8:0x40fad860] in 7204915 ns 02-27 20:43:30.016: W/System.err(574): java.net.UnknownHostException: Unable to resolve host "search.twitter.com": No address associated with hostname 02-27 20:43:30.016: W/System.err(574): at java.net.InetAddress.lookupHostByName(InetAddress.java:426) 02-27 20:43:30.026: W/System.err(574): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 02-27 20:43:30.026: W/System.err(574): at java.net.InetAddress.getAllByName(InetAddress.java:220) 02-27 20:43:30.026: W/System.err(574): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 02-27 20:43:30.036: W/System.err(574): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 02-27 20:43:30.036: W/System.err(574): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 02-27 20:43:30.046: W/System.err(574): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 02-27 20:43:30.046: W/System.err(574): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 02-27 20:43:30.046: W/System.err(574): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 02-27 20:43:30.055: W/System.err(574): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 02-27 20:43:30.055: W/System.err(574): at com.Prometheus.R1.JsonParsingActivity$DownloadWebPageTask.doInBackground(JsonParsingActivity.java:88) 02-27 20:43:30.055: W/System.err(574): at com.Prometheus.R1.JsonParsingActivity$DownloadWebPageTask.doInBackground(JsonParsingActivity.java:1) 02-27 20:43:30.055: W/System.err(574): at android.os.AsyncTask$2.call(AsyncTask.java:264)<br/> 02-27 20:43:30.066: W/System.err(574): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 02-27 20:43:30.066: W/System.err(574): at java.util.concurrent.FutureTask.run(FutureTask.java:137)<br/> 02-27 20:43:30.066: W/System.err(574): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 02-27 20:43:30.076: W/System.err(574): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 02-27 20:43:30.076: W/System.err(574): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 02-27 20:43:30.087: W/System.err(574): at java.lang.Thread.run(Thread.java:856) 02-27 20:43:30.108: W/System.err(574): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname) 02-27 20:43:30.116: W/System.err(574): at libcore.io.Posix.getaddrinfo(Native Method) 02-27 20:43:30.116: W/System.err(574): at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55) 02-27 20:43:30.126: W/System.err(574): at java.net.InetAddress.lookupHostByName(InetAddress.java:411) 02-27 20:43:30.126: W/System.err(574): ... 18 more 02-27 20:43:30.136: I/System.out(574): Except thrown by url http://search.twitter.com/search.json?q=javacodegeeks, .... 02-27 20:43:30.136: I/System.out(574): response = 

La excepción es una UnknownHostException como se puede ver:
"Ava.net.UnknownHostException: No se puede resolver el host" search.twitter.com ": ninguna dirección asociada con el nombre de host"
Pero no creo que el sitio es inaceptable …

¿Puede alguien decirme lo que está pasando + lo que tengo que hacer para salir adelante?

Lo deduje. Al parecer me volví a mi AVD de "modo de avión".

Para cualquiera que tenga el mismo problema que yo, probablemente esté usando la tecnología inalámbrica. Por alguna razón el andriod mira a su tarjeta LAN, así que vaya a las conexiones de red y haga clic derecho en la tarjeta LAN – DESACTIVAR ESA COSA! Problema resuelto.

Compruebe los permisos de su manifiesto, asegúrese de haber agregado esto:

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

Creo que el problema reside en la url que ha dado en la solicitud http o la conexión a Internet pls comprobar el siguiente enlace que le ayudará Link

Me encontré con este problema también. En mi caso, estoy usando HttpURLConnection para cargar JSON. El problema se corrigió cuando habilité "seguir los redireccionamientos". Aquí hay un fragmento de código que funciona:

  HttpURLConnection connection = null; BufferedReader reader = null; String JSON_data = null; try { final int half_hour = 30 * 60; URL fetch = new URL(requestUrl); connection = (HttpURLConnection) fetch.openConnection(); // FIXED: request to follow redirects - this seems to solve networking issues on older devices < API 21 connection.setInstanceFollowRedirects(true); connection.setUseCaches(true); connection.setDefaultUseCaches(true); connection.setRequestMethod("GET"); connection.addRequestProperty("Cache-Control", "max-age="+half_hour); connection.addRequestProperty("X-Auth-Token", getString(R.string.api_key)); boolean redirect = false; int status = connection.getResponseCode(); if (status != HttpURLConnection.HTTP_OK) { if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER) redirect = true; } Log.d(TAG, "===> HTTP STATUS CODE: " + status + ", redirect=" + redirect); connection.connect(); // Read the input stream into a String InputStream inputStream = connection.getInputStream(); if (inputStream == null) { return; } reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder buffer = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { buffer.append(line); buffer.append("\n"); } if (buffer.length() == 0) { return; } JSON_data = buffer.toString(); Log.d(TAG, "JSON_data=" + JSON_data); } catch (Exception e) { // possible UnknownHostException on older Android device? Log.e(TAG, "HttpURLConnection Exception - e=" + e.getMessage()); e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } if (reader != null) { try { reader.close(); } catch (IOException e) { Log.e(TAG, "Error closing stream - e=" + e.getMessage()); } } } 

Puede permitir el acceso a la red en el subproceso principal a través del siguiente fragmento. Al principio de su método onCreate () de su actividad.

 StrictMode.ThreadPolicy policy = new StrictMode. ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); 
  • Elemento de fila personalizada de Android para ListView
  • Cancelar AsyncTask después de algún tiempo
  • (Android) ¿Cómo obtengo SmartPhone ScreenWidth y Height?
  • ¿Cómo administro subproyectos de submódulo git en Eclipse?
  • Eliminar / ocultar la búsquedaVer solo una actividad
  • La disposición del cajón no se cierra en la parte posterior presionada (dependiendo del soporte-v4 lib)
  • ¿Dónde está jarsigner?
  • IntelliJ / búsqueda estructural: Elimine métodos inútiles que sólo llaman super-método
  • Cómo ocultar clases públicas en la biblioteca Jar usando ProGuard (o cualquier otra forma)?
  • Cómo devolver anonymous Lista o ArrayList en AsyncTask en Android
  • Datagram Transport Layer Security (DTLS) en Android / Java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.