HttpResponse utilisant le problème Android: execute provoque toujours une exception?

Je travaille sur un projet Android et je souhaite demander des informations à une API. On dirait que cela devrait être très basique!

Voici l’essentiel de mon code:

private InputStream resortingeveStream2(Ssortingng 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; } 

où variable url est la chaîne “http://search.twitter.com/search.json?q=javacodegeeks”.

Comme vous pouvez le voir, il y a de bonnes informations JSON sur ce site; Mon problème est que chaque fois que ” client.execute (getRequest); ” est appelé, le programme lève et intercepte une exception. Pas utile!

J’ai entendu deux choses:

1) Vous devez définir l’autorisation pour l’émulateur / le périphérique d’utiliser Internet! – Je pense avoir couvert ça, mais peut-être que je l’ai mal fait! Dans le androidmanifest.xml, j’ai ajouté

  

Donc, il y a ça.

2) (ce dont je ne suis pas si sûr), vous ne pouvez pas démarrer un fil “réseau” dans un fil “ui”. Je ne suis pas tout à fait sûr de ce que cela signifie, mais je suis allé de l’avant et ai suivi un tutoriel sur les threads, gestionnaires et AsyncTasks Android. Ici: S’il vous plaît vérifier le code sous le tutoriel AsyncTask, que j’ai suivi:

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

Après avoir suivi le didacticiel AsyncTask, j’ai constaté que j’avais toujours le même problème–

la ligne: HttpGet httpGet = new HttpGet (url) a toujours lancé une exception, comme avant.

Voici le logcat de ma tentative avec le tutoriel de threading ci-dessus:

 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)
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)
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 =

L’exception est une UnknownHostException, comme vous pouvez le voir:
“ava.net.UnknownHostException: Impossible de résoudre l’hôte” search.twitter.com “: aucune adresse associée au nom d’hôte”
Mais je ne pense pas que le site est inacceptable …

Quelqu’un peut-il me dire ce qui se passe + ce que je dois faire pour m’en sortir?

Vérifiez les permissions de votre manifeste, assurez-vous d’avoir ajouté ceci:

    

Deviner. Apparemment, j’ai éteint mon DAV sur “mode avion”.

Pour quiconque a le même problème que moi, vous utilisez probablement le sans fil. Pour une raison quelconque, l’andriod regarde votre carte LAN, alors allez dans Connexions réseau et cliquez avec le bouton droit de la souris sur la carte LAN – DÉSACTIVEZ CETTE CHOSE! Problème résolu.

Je pense que le problème réside dans l’url que vous avez donné dans la demande http ou la connexion Internet. Vérifiez le lien ci-dessous, il vous aidera à créer un lien.

J’ai rencontré ce problème aussi. Dans mon cas, j’utilise HttpURLConnection pour charger JSON. Le problème a été résolu lorsque j’ai activé “Suivre les redirections”. Voici un extrait de code qui fonctionne:

  HttpURLConnection connection = null; BufferedReader reader = null; Ssortingng 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 Ssortingng InputStream inputStream = connection.getInputStream(); if (inputStream == null) { return; } reader = new BufferedReader(new InputStreamReader(inputStream)); SsortingngBuilder buffer = new SsortingngBuilder(); Ssortingng line; while ((line = reader.readLine()) != null) { buffer.append(line); buffer.append("\n"); } if (buffer.length() == 0) { return; } JSON_data = buffer.toSsortingng(); 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()); } } } 

vous pouvez autoriser l’access au réseau dans le thread principal via l’extrait de code suivant. au début de votre méthode onCreate () de votre activité.

 SsortingctMode.ThreadPolicy policy = new SsortingctMode. ThreadPolicy.Builder().permitAll().build(); SsortingctMode.setThreadPolicy(policy);