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:
- Cómo esperar el inicio de un subproceso en java
- ¿Qué tan seguro es el almacenamiento interno?
- La aplicación para Android no recibió datos del concentrador SignalR
- ¿Es posible vincular los comentarios en IntelliJ Idea?
- La creación de un JSON con Gson hace que la aplicación se bloquee
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?
- Utilice la biblioteca AppCompat para la compatibilidad con ActionBar
- Dos animaciones con 1 segundo de retraso entre
- Android / Java: convierte cualquier cadena en color (hexadecimal)
- ¿Cómo manejar los campos JSON opcionales en Retrofit para Android?
- ¿Es una mala idea usar printStackTrace () en Android Exceptions?
- NullPointerException: Intenta invocar el método virtual 'boolean java.lang.String.equalsIgnoreCase (java.lang.String)' en una referencia de objeto nulo
- setURLStreamHandlerFactory y "java.lang.Error: La fábrica ya está configurada"
- Android: ¿cómo obtener el sexo y la edad del usuario?
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);