HttpResponse utilisant android question: exécuter provoque toujours une exception?
J'ai travaillé sur un projet Android et j'en suis à un point où je veux poser quelques API pour plus d'informations. Semble que ce doit être très basique!!
Voici l'essentiel de mon code:
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;
}
où la variable d'url est la chaîne de caractères "http://search.twitter.com/search.json?q=javacodegeeks".
Comme vous pouvez le voir il y a une belle JSON info sur ce site; Mon problème est que à chaque fois "du client.execute(getRequest);" est appelé, le programme lève et attrape une exception. Pas utile!
J'ai entendu parler de deux choses:
1) Vous devez définir des autorisations pour l'émulateur/appareil pour utiliser l'internet!
-- Je pense que j'ai couvert ce, mais peut-être que j'ai tort!
Dans le androidmanifest.xml j'ai ajouté
< uses-permission android:name="android.permission.INTERNET" >< /uses-permission>
Donc il n'y a qu'.
2) (qui, je n'en suis pas certain) vous ne pouvez pas démarrer un "networking" fil à l'intérieur d'un 'ui' thread. Je ne suis pas entièrement sûr de ce que cela signifie, mais je suis allé de l'avant et de suivre un tutoriel sur Android Threads, les Gestionnaires et AsyncTasks. Ici: Veuillez vérifier le code en vertu de l'AsyncTask tutoriel, que j'ai suivi:
http://www.vogella.de/articles/AndroidPerformance/article.html
Après suivant les AsyncTask tutoriel, j'ai trouvé que j'avais toujours le même problème--
la ligne:
HttpGet httpGet = new HttpGet(url)
toujours jeté une exception, comme avant.
Voici le logcat de ma tentative avec le filetage tutoriel 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)<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 =
L'exception est un UnknownHostException comme vous pouvez le voir:
"ava.net.UnknownHostException: Impossible de résoudre l'hôte "search.twitter.com": Aucune adresse associée avec le nom d'hôte"
Mais je ne pense pas que le site est inacceptable...
Quelqu'un peut me dire ce qu'il se passe sur + ce que je dois faire pour obtenir à travers elle?
J'ai ajouté le logcat à l'original question, que c'est long.
Ajouter les autorisations résolu pour moi. Mais, assurez-vous de changer cette ligne:
< uses-permission android:name="android.permission.INTERNET" >< /uses-permission>
à <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
OriginalL'auteur Ethan Sherr | 2012-02-28
Vous devez vous connecter pour publier un commentaire.
Vérifier les autorisations de votre manifeste, assurez-vous d'avoir ajouté ce:
ACCESS_NETWORK_STATE
etACCESS_WIFI_STATE
?OriginalL'auteur Genaut
Pensé à elle. Apparemment, j'ai transformé mon AVD de "mode avion".
Pour quelqu'un ayant le même problème que moi, vous utilisez probablement sans fil. Pour une raison quelconque, le andriod regarde votre carte de réseau local, cliquez sur Connexions Réseau, puis cliquez droit sur la carte réseau-- DISABLE QUE CHOSE! Le problème est résolu.
OriginalL'auteur Ethan Sherr
Je pense que le problème réside dans l'url que vous avez donné dans la requête http ou de la connexion internet pls consulter le lien ci-dessous, il vous aidera à Lien
Pourrait être le problème dans mes paramètres réseau?
OriginalL'auteur deepa
Je suis tombé sur ce problème. Dans mon cas, je suis en utilisant HttpURLConnection pour charger JSON. Le problème a été résolu quand j'ai activé l'option "suivre les redirections." Voici un code-extrait de code qui fonctionne:
OriginalL'auteur Lee Hounshell
vous pouvez autoriser l'accès au réseau dans le thread principal via le fragment de code suivant. au début de votre onCreate() la méthode de votre activité.
OriginalL'auteur Ehsan Shamsi