Bonjour,

Je suis en train de faire un exemple qui permet de récupérer des données depuis MySQL, à travers un script PHP.

Je travaille avec Android 2.3.3, Wamp Server et j'ai créé une base bdVille et une table tblVille et j’ai inséré des valeurs.

J'ai créé un fichier ville.php et je l'ai placé dans C:\wamp\www

Le contenu de ce script est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 '".$_REQUEST['ville']."%'");
  while($row=mysql_fetch_assoc($sql))
  $output[]=$row;
 
  mysql_close();
?>
J'ai testé ce script pour être sûr que la connexion fonctionne en appelant l'adresse : http://192.168.1.3/ville.php
Et lors du test, rien n'est affiché donc aucun problème de syntaxe au niveau du script.
Cette IP est attribuée depuis ma connexion WIFI.

Code de l'application Android :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.exemple.ville;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;
 
public class ville 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);  
 
        // Définir le texte et appeler la fonction de connexion.  
        txt.setText("Connexion..."); 
        // Appeler la méthode pour récupérer les données JSON
        txt.setText(getServerData(strURL)); 
    }
 
    // Mettre l'adresse du script PHP
    // Attention localhost ou 127.0.0.1 ne fonctionnent pas. Mettre l'adresse IP local.
    public static final String strURL = "http://192.168.1.3/ville.php";
 
    private String getServerData(String returnString) {
        InputStream is = null;
        String result = "";
        // Envoyer la requête au script PHP.
        // Script PHP : $sql=mysql_query("select * from tblVille where Nom_ville like '".$_REQUEST['ville']."%'");
        // $_REQUEST['ville'] sera remplacé par L dans notre exemple.
        // Ce qui veut dire que la requête enverra les villes commençant par la lettre L
        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());
        }
 
        // 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();
        }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 += "kkk"; 
            }
        }catch(JSONException e){
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
        return returnString; 
    }
}
Le fichier main.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>
Mais lorsque je teste cet exemple, dans l'émulateur, il y a juste cette ligne affichéé
http://192.168.1.3/ville.php
Alors que normalement, en plus de cette ligne, il devrait s'afficher également les villes qui répondent aux requêtes SQL.

Dans le console d'Eclipse ces lignes sont affichées :
[2012-08-03 01:10:19 - ville] Starting activity com.exemple.ville.ville on device emulator-5554
[2012-08-03 01:10:22 - ville] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.exemple.ville/.ville }
[2012-08-03 01:11:42 - ville] ------------------------------
[2012-08-03 01:11:42 - ville] Android Launch!
[2012-08-03 01:11:42 - ville] adb is running normally.
[2012-08-03 01:11:42 - ville] Performing com.exemple.ville.ville activity launch
[2012-08-03 01:11:42 - ville] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'TEST'
[2012-08-03 01:11:42 - ville] WARNING: Application does not specify an API level requirement!
[2012-08-03 01:11:42 - ville] Device API version is 10 (Android 2.3.3)
[2012-08-03 01:11:42 - ville] Uploading ville.apk onto device 'emulator-5554'
[2012-08-03 01:11:43 - ville] Installing ville.apk...
[2012-08-03 01:11:55 - ville] Success!
[2012-08-03 01:11:55 - ville] Starting activity com.exemple.ville.ville on device emulator-5554
Quelqu'un saurait-il m'indiquer ce qui ne va pas ?

Merci d'avance pour votre aide.