Désolé pour la réponse tardive =) j'ai testé ton lien, mais c'est le code java ou php que je dois mettre?
Version imprimable
Désolé pour la réponse tardive =) j'ai testé ton lien, mais c'est le code java ou php que je dois mettre?
Non, le code JSon que ton PHP te génère;
Est-ce que tu as au moins compris ce que tu faisais dans ton code et qu'est que JSon?
C'est toi encore qui nous l'a donné hier:
C'est ça :
Code:[{"ID_Ville":"3","Nom_Ville":"Lyon"},{"ID_Ville":"10","Nom_Ville":"Lille}]
Ok merci ^^
Effectivement j'ai une erreur :
Dans de parsing visiblement.. mais comment je la corrige?Code:
1
2
3 Parse error on line 1: ...[{"ID_Ville":"3","Nom_Ville":"Lyon"},{"ID_Ville":"10","Nom_Ville":"Lille}] ---------------------------------------------------------------------^
Bonjour,
Désolé de m'immiscer dans votre conversation, mais il ne manquerait pas simplement un " à la fin ?
Code:[{"ID_Ville":"3","Nom_Ville":"Lyon"},{"ID_Ville":"10","Nom_Ville":"Lille}]
Code:[{"ID_Ville":"3","Nom_Ville":"Lyon"},{"ID_Ville":"10","Nom_Ville":"Lille"}]
Surement ça doit être ça;
je n'ai même pas tenté de m’intéresser à ce code, ne connaissant pas JSon.
Ca aurait été trop facile sinon.
en fait c'était mal copié ce que j'affiche c'est :
---EDIT---Code:[{"ID_Ville":"3","Nom_Ville":"Lyon"},{"ID_Ville":"10","Nom_Ville":"Lille"}]
Par contre je l'avais mal copié dans le JSONLint et du coup en le copiant bien cette fois j'obtiens :
et ça me met code validCode:
1
2
3
4
5
6
7
8
9
10 [ { "ID_Ville": "3", "Nom_Ville": "Lyon" }, { "ID_Ville": "10", "Nom_Ville": "Lille" } ]
du coup pourquoi je n'affiche rien dans mon programme Eclipse?
Parce que le log indique clairement que l'erreur provient de "Lille. Je pense qu'il n'arrive pas à trouver la fin de la chaîne.Code:
1
2
3 Parse error on line 1: ...[{"ID_Ville":"3","Nom_Ville":"Lyon"},{"ID_Ville":"10","Nom_Ville":"Lille}] ---------------------------------------------------------------------^
Tu verras que c'est vraiment simple quand tu en auras besoin ;)Citation:
je n'ai même pas tenté de m’intéresser à ce code, ne connaissant pas JSon.
Donc ton programme devrait fonctionner.
et Logcat te dit?
j'ai cette erreur :
Code:06-09 13:09:01.814: ERROR/log_tag(277): Error parsing data org.json.JSONException: Value Error of type java.lang.String cannot be converted to JSONArray
si tu affiches ta variable "result" dans LogCat; tu as bien le texte que PHP t'a généré dedans?
Non je ne l'affiche pas :s
j'affiche :
Code:
1
2
3
4
5
6
7
8
9 06-09 13:17:10.949: INFO/result(329): Error HTTP request not supported. 06-09 13:17:10.949: INFO/result(329): POST /mesRequestes/Ville.php HTTP/1.1 06-09 13:17:10.949: INFO/result(329): Content-Length: 7 06-09 13:17:10.949: INFO/result(329): Content-Type: application/x-www-form-urlencoded 06-09 13:17:10.949: INFO/result(329): Host: 192.168.32.147 06-09 13:17:10.949: INFO/result(329): Connection: Keep-Alive 06-09 13:17:10.949: INFO/result(329): User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) 06-09 13:17:10.949: INFO/result(329): Expect: 100-Continue 06-09 13:17:10.959: ERROR/log_tag(329): Error parsing data org.json.JSONException: Value Error of type java.lang.String cannot be converted to JSONArray
Voilà;
donc ton soucis vient de la requêtre HTTP de ton Android pour récupérer la valeur qui est fausse;
C/C le bout de code qui envoie une requête à ta page PHP et qui récupère le résultat.
Le voici :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // Envoyer la requête au script PHP. ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("ville","L")); // Envoie de la commande http try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(strURL); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection " + e.toString()); }
Pourquoi ne pas plutot utiliser des requetes GET plutot que POST?
Ce serait plus simple! Ainsi ton code Java deviendrai :
Pas plus jolie? :DCode:
1
2
3
4
5 String url = "http://ton_url/ville.php?ville=L"; HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = httpclient.execute(new HttpGet(url)); is = response.getEntity().getContent();
Cependant, il faudra modifier dans ton code PHP tous les $_POST par $_GET.
As tu bien pensé à ajouter dans le manifest de ton application Android la permission INTERNET? Sinon, ton application n'aura pas les droits pour se connecter à Internet.
Oui j'ai rajouté les permission internet =)
Par contre je n'ai pas de $_POST dans mon code PHP 8O, j'ai :
Code:
1
2
3
4
5
6
7
8
9 <?php mysql_connect("localhost","root"); mysql_select_db("bdVille"); $sql=mysql_query("SELECT * FROM tblVille WHERE Nom_ville like 'L%'"); while($row=mysql_fetch_assoc($sql)) $output[]=$row; print(json_encode($output)); mysql_close(); ?>
Et avec ça tu as toujours des erreurs ?
Pour utiliser la variable POST ou GET il faudrait mettre un truc du genre (je ne suis pas très bon en php donc je suis pas sur de la syntaxe)
$sql=mysql_query("SELECT * FROM tblVille WHERE Nom_ville like '".$_GET["ville"]."%'");
Ok, bon j'ai mis :
mais j'ai toujours la même erreur.Code:
1
2
3
4
5
6
7
8
9 <?php mysql_connect("localhost","root"); mysql_select_db("bdVille"); $sql=mysql_query("SELECT * FROM tblVille WHERE Nom_ville like '".$_GET['ville']."%'"); while($row=mysql_fetch_assoc($sql)) $output[]=$row; print(json_encode($output)); mysql_close(); ?>
Et en plus j'essai d'afficher result dans cette partie du code :
mais j'ai un log avec marqué : file not found :sCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // Convertion de la requête en string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); Log.i("result", result); }catch(Exception e){ Log.e("log_tag", "Error converting result " + e.toString()); }
Je reprend la discussion de cour, t'es repartie donc sur un requête get?
C'est possible de voir tout le code en entier pour avoir une vue global?
Et il t'affiche quoi exactement ton logCat?
alors la derniére version du code c'est :
le code java :
le code PHP :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public class VillePHP extends Activity { TextView txt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout rootLayout = new LinearLayout(getApplicationContext()); txt = new TextView(getApplicationContext()); rootLayout.addView(txt); setContentView(rootLayout); txt.setText("Connexion..."); txt.setText(getServerData(strURL)); } public static final String strURL = "http://192.168.32.147/mesRequestes/Ville.php"; private String getServerData(String returnString) { InputStream is = null; String result = ""; // Envoyer la requête au script PHP. ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("ville","L")); // Envoie de la commande http try{ HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = httpclient.execute(new HttpGet(strURL)); is = response.getEntity().getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection " + e.toString()); } // Convertion de la requête en string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); Log.i("result", result); }catch(Exception e){ Log.e("log_tag", "Error converting result " + e.toString()); } // Parse les données JSON try{ JSONArray jArray = new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); // Affichage ID_ville et Nom_ville dans le LogCat Log.i("log_tag","ID_ville: "+json_data.getInt("ID_ville")+ ", Nom_ville: "+json_data.getString("Nom_ville")); // Résultats de la requête returnString += "\n\t" + jArray.getJSONObject(i); } }catch(JSONException e){ Log.e("log_tag", "Error parsing data " + e.toString()); } return returnString; } }
Code:
1
2
3
4
5
6
7
8
9 <?php mysql_connect("localhost","root"); mysql_select_db("bdVille"); $sql=mysql_query("SELECT * FROM tblVille WHERE Nom_ville like '".$_GET['L']."%'"); while($row=mysql_fetch_assoc($sql)) $output[]=$row; print(json_encode($output)); mysql_close(); ?>
et le logcat m'affiche :
Code:
1
2
3
4
5
6 06-10 06:49:52.559: INFO/AndroidRuntime(257): NOTE: attach of thread 'Binder Thread #3' failed 06-10 06:49:52.589: INFO/ActivityManager(58): Start proc com.julie for activity com.julie/.VillePHP: pid=276 uid=10041 gids={3003} 06-10 06:49:53.719: INFO/result(276): Sorry, file not found. 06-10 06:49:53.739: ERROR/log_tag(276): Error parsing data org.json.JSONException: Value Sorry of type java.lang.String cannot be converted to JSONArray 06-10 06:49:54.249: INFO/ActivityManager(58): Displayed activity com.julie/.VillePHP: 1686 ms (total 26904 ms) 06-10 06:49:54.249: INFO/ActivityManager(58): Displayed activity com.android.launcher/com.android.launcher2.Launcher: 26910 ms (total 26910 ms)
Déjà un soucis;
depuis ton Android, tu envoies ta requête via la méthode POST; donc change dans ton PHP $_GET par $_POST;
puis dans ton constructeur du InputStreamReader, vire le charset; ne laisse que new InputStreamReader(is);
J'ai fait les changements .. mais toujours le même problème :s
Si tu entres directement l'URL depuis ton navigateur Internet de l'Android, ça fonctionne?
je peux pas écrire l'adresse sur mon émulateur, il veut pas m'écrire les chiffre :?
Tu peux écrire dans l'émulateur avec ton clavier physique de ton ordi, ou clavier virtuel de l'émulateur. Si t'y arrives pas; va dans les paramètres Android dans l'émulateur pour parametrer la configuration regionale.
J'ai essayé avec le clavier, les lettres ça marche mais pas les chiffre :s
euh tu peux être plus précis stp ?Citation:
va dans les paramètres Android dans l'émulateur pour parametrer la configuration regionale.
Bien t'as des paramètres dans ton système Android; là où tu règles tes sonneries et tout...
Et t'as un menu pour configurer tout ce qui est langue régionale, ... vérifie bien que t'es bien en français en terme d'écriture.
Le truc c'est de savoir si depuis ton émulateur à la main depuis ton navigateur, t'arrive déjà à accéder à ta page!
Oui je suis bien en français mais le pb vient de l'émulateur ... je ne peux pas écrire de chiffre dans l'explorer :s
Si t'as un pavé numérique ne l'utilise pas, il faut utilisé les chiffre qui se trouvent en haut du clavier.
argh :aie: j'avais pas pensé, merci effectivement ça marche mieux.
Bon alors mon émulateur m'affiche : Sorry, file not found
mais dans mon url je met l'adresse IP de mon Pc sur lequel sont installé mon serveur et ma bdd, mais mon émulateur ne peux pas y accéder, c'est donc plutot logique qu'il m'affiche un file not found. Du coup quel url je dois mettre pour accéder à ma bdd?
Et par le navigateur l'url fonctionne. Parce que pour mes test je bossais sur un serveur local donc je rentrais l'ip relié au serveur et ca fonctionait...
tu dois configurer Wamp;
normalement, si tu fais clic droit sur l'icone de Wamp, tu dois pouvoir quelque part éditer la configuration d'Apache (fichier: httpd.conf);
Une fois que tu l'as trouvé, dans ce fichier, tu devrais trouver quelque part cette ligne:édite cette ligne par juste:Code:Listen 127.0.0.1:8080
et normalement, ton site devrait être visible depuis l'émulateur.Code:Listen 8080
En gros, avant cette modification, Apache (Wamp) n'autorise l'accès à tes pages web local que depuis la machine elle-même.
Bon ... toujours la même erreur de parsing :s
En fait j'avais déja listen:8080, j'ai changé en listen 127.0.0.1:8080 pour voir la différence mais aucune :s
et si dans l'explorateur de mon émulateur je met :
http://192.168.32.147/mesRequestes/Ville.php ça m'affiche file not found et si je met http//192.168.32.147:8080/mesRequestes/Ville.php ça m'affiche :
Forbidden
You don't have permission to access /mesRequestes/ville.php on this server
---EDIT---
On m'a dit que mon code PHP était obsoléte et que je devrais plutôt passer par du pdo, vous en pensez quoi? quelques tutos à me conseiller? Merci
---EDIT2---
J'ai essayé de créer un utilisateur test avec un mot de passe et de modifier mon php en conséquence ... mais même pb
Aprés quelques heures de recherches j'ai pt un début de solution,
Lorsque sur mon émulateur je met l'url : http://10.0.2.2:8080/mesRequestes/Ville.php
J'affiche bien les villes concernées par ma requêtes =D
Par contre si je tente de lancer mon programme (en mettant la bonne url cette fois) ... toujours ce problème de parsing -_-
---EDIT---
En fait j'ai toujours l'erreur de parsing qui s'affiche dans mon logcat, mais j'ai aussi le résultat de ma requête qui s'affiche pour ma variable result, donc mon programme marche à peu prés, le seul problème, c'est que ça ne s'affiche pas dans l'émulateur ...
---EDIT2---
voici la partie du code d'où provient l'erreur, dites-moi si vous voyez d'où peut venir le pb :
J'ai entendu parler de mysql connector qu'il fallait parfois mettre dans les projets Eclipse, est-ce que ça peut venir de là? parce que je ne l'ai pas mis dans mon projet?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // Parse les données JSON try{ JSONArray jArray = new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); // Affichage ID_ville et Nom_ville dans le LogCat Log.i("log_tag","ID_ville: "+json_data.getInt("ID_ville")+ ", Nom_ville: "+json_data.getString("Nom_ville")); // Résultats de la requête returnString += "\n\t" + jArray.getJSONObject(i); } }catch(JSONException e){ Log.e("log_tag", "Error parsing data " + e.toString()); }
lien : http://www.mysql.com/products/connector/