Android HTTP Get
J'ai regarder un peu les post sur le forum et je ne trouve pas de réponse à mon problème. Je suis en train d'essayer d'obtenir une réponse à partir d'un fichier php. Le fichier php fonctionne. Le problème est l'Application Android n'exécutera pas à ma demande. Voici deux exemples de mon code et le résultat que j'obtiens dans le textview:
public void changText(View view) {
TextView textv = (TextView)findViewById(R.id.textview1);
textv.setText("Text Has Been Changed");
BufferedReader in = null;
String data = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
URI website = new URI("http://alanhardin.comyr.com/matt24/matt28.php");
request.setURI(website);
HttpResponse response = httpclient.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
textv.append(" Connected ");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
}
Le TextView se lit comme suit: le Texte A Été Modifié
public void changText(View view) {
TextView textv = (TextView)findViewById(R.id.textview1);
textv.setText("Text Has Been Changed");
BufferedReader in = null;
String data = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
URI website = new URI("http://alanhardin.comyr.com/matt24/matt28.php");
request.setURI(website);
//HttpResponse response = httpclient.execute(request);
//in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
textv.append(" Connected ");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
}
Le TextView se lit comme suit: le Texte A Été Modifié Connecté
Dans ce manifeste, j'ai:
<uses-permission android:name="android.permission.INTERNET" />
Dans le journal d'erreur que j'obtient:
Erreur de connexion http android.os.NetworkOnMainThreadException
Toute aide serait appréciée.
Dans le code que vous avez posté, vous n'êtes pas en train de lire les données une fois que vous construisez un lecteur.
Ce qui s'est passé, si vous exécutez votre code ?
Je ne suis pas d'essayer de lire le retour de l'objet JSON, maintenant, je suis juste essayer de se connecter à mon fichier php
Si je lance mon code avec le premier exemple, le TextView se lit comme suit: "le Texte A Été Modifié". Si je lance mon code avec le deuxième exemple, le TextView se lit comme suit: "le Texte A Été Modifié Connecté". Il semble que le httpclient.execute(demande) est à l'origine des problèmes.
Ce qui s'est passé, si vous exécutez votre code ?
Je ne suis pas d'essayer de lire le retour de l'objet JSON, maintenant, je suis juste essayer de se connecter à mon fichier php
Si je lance mon code avec le premier exemple, le TextView se lit comme suit: "le Texte A Été Modifié". Si je lance mon code avec le deuxième exemple, le TextView se lit comme suit: "le Texte A Été Modifié Connecté". Il semble que le httpclient.execute(demande) est à l'origine des problèmes.
OriginalL'auteur user908759 | 2013-12-02
Vous devez vous connecter pour publier un commentaire.
Android est probablement de l'exécution de votre demande tout simplement parfait. Vous semblez ignorer les données retournées par le serveur. Vous pourriez faire quelque chose comme ceci, par exemple:
Il ressemble à votre serveur retourne un objet JSON, donc, vous voulez probablement faire quelque chose de plus intelligent comme de lire la totalité de la réponse, l'analyser (à l'aide de
new JSONArray(response)
), et d'en extraire des champs, mais le code ci-dessus permettrait au moins de vérifier que Android est en cours d'exécution de votre requête.EDIT: De l'exception que vous rapport, il semble que vous exécutez votre code sur le main thread d'INTERFACE utilisateur. Comme d'API 11 qui est interdit (et était mal vu avant). Il y a plusieurs articles sur la façon de résoudre ce problème. Voir le Guide de sujet Indolore threading ainsi que des tutoriels ici et ici. Voir aussi ce fil pour plus d'informations.
String
, prendre un coup d'oeil à cette réponse.Je vous remercie pour votre réponse. Malheureusement, votre nouveau code n'a pas fonctionné. Le TextView lit encore "le Texte A Été Modifié". Les problèmes semble être avec le httpclient.execute(demande), pas avec le parsing JSON. Je sais par la suite, j'ai besoin de lire l'objet JSON, mais pour l'instant je suis juste essayer de se connecter à mon fichier php.
Faut-il encore ajouter le mot " Connecté "? Vous êtes peut-être en train de rattraper une exception. (En passant, c'est mieux de le journal de l'exception à l'aide de trois-argument d'appel
Log.e("log_tag", "Error in http connection", e);
plutôt que d'appelere.toString()
. Vous aurez plus d'informations dans le logcat de cette façon.)Pas Connecté n'est pas ajouté. C'était le point de mes deux exemples. Quand j'ai commenté le "httpclient.execute(demande);" Connecté a été ajouté à la TextView, chaque fois "httpclient.execute(demande);" n'a PAS été commentée, Connecté n'est pas ajouté. C'est pourquoi je pense que le problème a quelque chose à voir avec "httpclient.execute(demande);"
Ah. Le problème, c'est que vous êtes l'exécution de ce code sur le thread principal. Ce n'est pas permis Il y a plusieurs articles sur la façon de résoudre ce problème. Voir le Guide sur la rubrique Indolore enfilage ainsi que des tutoriels ici et ici. Voir aussi thread
OriginalL'auteur Ted Hopp
OriginalL'auteur Raj008