INTERACTION AVEC UNE
BASE DE DONNÉES
DISTANTE
2017-2018
© Imene Sghaier
ISET Nabeul
SEM3
2
 Objectifs spécifiques
 S’initier au format JSON
 Se familiariser avec la manipulation du format JSON avec
l’API Android
 Eléments de contenu
 Introduction
 Architecture Client/Serveur
 Connexion d’une application Android à une BD distante
 JSON
 Exemple
 Exemple 1: Récupérer le résultat dans une String
 Exemple 2: Insertion de données
 Exemple 2: Suppression de données
 Volume Horaire :
 Cours : 3 heures
OBJECTIFS ET ÉLÉMENTS DE CONTENU
Imene Sghaier-Développement Mobile Avancé
INTRODUCTION
 Ce cours décrit la façon d'accéder à une base de données
distante sous Android
 Il est impossible de se connecter à une base de données
distante directement sous android.
 La méthode la plus répandue pour se connecter à une base de
données à distance à partir d'un appareil Android, est de mettre
en place un script PHP (ou n’importe quel langage web) et
d'éxécuter ce script en utilisant le protocole HTTP.
 Dans ce cours nous allons utiliser une base de données
MySQL. On doit alors:
 Avoir une connaissance basique des communications entre un serveur et
des clients.
 Savoir faire des requêtes HTTP depuis une application Android.
 Lier un serveur applicatif en PHP avec une base de données MySQL.
3
Imene Sghaier-Développement Mobile Avancé
4
 Introduction
 Architecture Client/Serveur
 Connexion d’une application Android à une
BD distante
 JSON
 Exemple
 Exemple 1: Récupérer le résultat dans
une String
 Exemple 2: Insertion de données
 Exemple 2: Suppression de données
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
ARCHITECTURE CLIENT/SERVEUR
 Une architecture client/serveur est mise en œuvre à
partir du moment où une application a besoin d’un
serveur et qu’il faut y centraliser les données pour
permettre à d’autres clients de les récupérer.
 Ce genre d’architecture est maintenant de plus en plus
courante et donc, de plus en plus rare de fonctionner
uniquement avec des bases de données locales.
 Dans ce cours nous allons utiliser une architecture
client/Serveur qui se base sur le protocole HTTP pour la
communication
5
Imene Sghaier-Développement Mobile Avancé
ARCHITECTURE CLIENT-SERVEUR
 Les flèches représentent les requêtes HTTP
 Il y a plusieurs types de requêtes, on s'intéresse à 2 types:
 GET: C'est la méthode la plus courante pour demander une
ressource. Une requête GET est sans effet sur une ressource, il
doit être possible de répéter la requête sans effet (récupérer des
données de la base ).
 POST : Cette méthode doit être utilisée si on veut insérer des
données (on modifie la ressource)
6
Imene Sghaier-Développement Mobile Avancé
7
 Introduction
 Architecture Client/Serveur
 Connexion d’une application Android à
une BD distante
 JSON
 Exemple
 Exemple 1: Récupérer le résultat dans
une String
 Exemple 2: Insertion de données
 Exemple 2: Suppression de données
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
CONNEXION D’UNE APPLICATION ANDROID À UNE BD
DISTANTE
8
(1)
(2)
(3)
(4)
(5)
Imene Sghaier-Développement Mobile Avancé
CONNEXION D’UNE APP ANDROID À UNE BD
DISTANTE
 MySQL est utilisé comme une base de données
au serveur web et PHP est utilisé pour extraire
des données de la base de données.
 Notre application va communiquer avec la page
PHP avec des paramètres nécessaires (1) puis
PHP communique avec la base de données
MySQL et va chercher le résultat (2+3) et enfin
retourner les résultats pour nous sous le format
de données JSON (4+5)
 Ici on comprend que notre application Android ne
sait communiquer avec notre base de données
qu'avec PHP comme intermédiaire
9
Imene Sghaier-Développement Mobile Avancé
CONNEXION D’UNE APP ANDROID À UNE BD
DISTANTE
 L’application va envoyer des requêtes GET ou POST au
script PHP, puis celui-ci va se connecter à la base de
données et renvoyer les données requises (au format
JSON).
 Pour résumer ce que nous allons voir pour accéder à notre
BD, nous devons passer par l'intermédiaire de fichiers php
:
 Android fait un requête vers notre fichier php
 Le fichier php fait un requête dans notre BD
 Il nous retourne le résultat sous format JSON vers l’application
Android
 Nous pouvons utiliser les résultats JSON dans notre application
Android
 Seul le script PHP utilisé pour la connexion à la BD
contiendra les identifiants d'accès à la base de données.
10
Imene Sghaier-Développement Mobile Avancé
11
 Introduction
 Architecture Client/Serveur
 Connexion d’une application Android à une
BD distante
 JSON
 Exemple
 Exemple 1: Récupérer le résultat dans
une String
 Exemple 2: Insertion de données
 Exemple 2: Suppression de données
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
JSON
JSON (JavaScript Object Notation) est un format
léger d'échange de données.
 Il est facile à lire ou à écrire pour des humains. Il est
aisément analysable ou générable par des machines.
JSON est un format texte complètement indépendant
de tout langage, mais les conventions qu'il utilise seront
familières à tout programmeur habitué aux langages
descendant du C, comme par exemple : C lui-même,
C++, C#, Java, JavaScript, Perl, Python et bien d'autres
[1].
Ces propriétés font de JSON un langage d'échange
de données idéal.
12
Imene Sghaier-Développement Mobile Avancé
JSON
 C’est un format totalement indépendant de tout langage. Ce qui
le rend un langage d’échange de données idéal.
 JSON se base sur deux structures :
 Une collection de couples « clés/valeur » connu sous divers
langages par un objet, un enregistrement, une structure, un
dictionnaire, une table de hachage, une liste typée ou un
tableau associatif.
 Une liste de valeurs ordonnées, la plupart des langages la
nomme par un tableau, un vecteur, une liste ou une suite.
Ces structures de données sont universelles. Pratiquement tous
les langages de programmation modernes les proposent sous une
forme ou une autre. Il est raisonnable qu'un format de données
interchangeable avec des langages de programmation se base
aussi sur ces structures. 13
Imene Sghaier-Développement Mobile Avancé
JSON
 En JSON, les structures de base prennent les formes suivantes
 Un objet, qui est un ensemble de couples nom/valeur non ordonnés.
Un objet commence par { (accolade gauche) et se termine
par } (accolade droite). Chaque nom est suivi de : (deux-points) et les
couples nom/valeur sont séparés par , (virgule).
 Un tableau est une collection de valeurs ordonnées. Un tableau
commence par [ (crochet gauche) et se termine par ] (crochet droit).
Les valeurs sont séparées par , (virgule).
 Une valeur peut être soit
 une chaîne de caractères entre guillemets,
 un nombre,
 true ou false ou null
 un objet
 un tableau. Ces structures peuvent être imbriquées.
NB: Une chaîne de caractères est une suite de zéro ou plus caractères Unicode, entre
guillemets, et utilisant les échappements avec antislash. Un caractère est représenté
par une chaîne d'un seul caractère. 14
Imene Sghaier-Développement Mobile Avancé
JSON
 Exemples
● valeur:
○ " Imene"
● tableau:
○ [" Imene", " Aida", " Nejia"]
● objet
○ {" noteDs " :17, " noteEx":15} 15
Imene Sghaier-Développement Mobile Avancé
JSON VS XML
16
Imene Sghaier-Développement Mobile Avancé
JSON
 Si le noeud JSON commence avec un [, alors nous
devons utiliser la méthode getJSONArray().
 Si le noeud JSON commence avec une {, alors nous
devons utiliser la méthode getJSONObject().
17
Imene Sghaier-Développement Mobile Avancé
18
 Introduction
 Architecture Client/Serveur
 Connexion d’une application Android à une
BD distante
 JSON
 Exemples
 Exemple 1-Sélection de données
 Exemple 2-Insertion de données
 Exemple 2-Suppression de données
PLAN DU CHAPITRE
Imene Sghaier-Développement Mobile Avancé
 Supposons que nous avons une base de données
nommée University qui contient une table crée avec la
requête suivante :
CREATE TABLE ‘Students' (
'id' INT NOT NULL AUTO_INCREMENT PRIMARY
KEY,
‘login' VARCHAR( 100 ) NOT NULL,
‘pwd' VARCHAR( 100 ) NOT NULL
);
EXEMPLE 1-SÉLECTION DE DONNÉES : CRÉATION DE LA
BD
19
Imene Sghaier-Développement Mobile Avancé
 Nous voulons obtenir la liste des étudiants, pour ceci nous
avons écrit le script php suivant
EXEMPLE 1-SÉLECTION DE DONNÉES: SCRIPT PHP
20
Imene Sghaier-Développement Mobile Avancé
<?php
mysql_connect("host","username","password");
mysql_select_db("University ");
$q=mysql_query("SELECT * FROM Students");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print( json_encode($output));
mysql_close();
?>
EXEMPLE1-SÉLECTION DE DONNÉES: CODE JAVA
 Nous pourrons créer une classe Student pour faciliter la
manipulation des objets Students dans le code java
21
Imene Sghaier-Développement Mobile Avancé
public class Student{
int id;
String login, pwd;
public Student(int i, String l, String p){
id=i;
login=l;
pwd=;
}
//on pourra ajouter des getters et setters et toString()
}
try{
StringBuilder sb = new StringBuilder();
String text = "null"; //pour y mettre le résultat
BufferedReader reader = null; //pour lire le resultat
ArrayList<Student> listOfStudients = new ArrayList<Student>();
JSONObject json_data;
URL url=new URL(“"http://imene.alwaysdata.net/demoWS/script.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("GET");
// récupérer la réponse http
reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
// lire la réponse du serveur
while ((line = reader.readLine()) != null) {
// Concatener la ligne suivante dans 1 chaine de caractères
sb.append(line + "n"); }
text = sb.toString(); } catch (Exception ex) { }
finally { reader.close(); }
EXEMPLE1-SÉLECTION DE DONNÉES: RÉCUPÉRER LE RÉSULTAT
DANS UNE STRING
Imene Sghaier-Développement Mobile Avancé
22
EXEMPLE1-SÉLECTION DE DONNÉES: RÉCUPÉRER LE
RÉSULTAT DANS UNE STRING
 Remarque: N’oublions pas d’ajouter les permissions
nécessaires pour faire une connexion internet
Imene Sghaier-Développement Mobile Avancé
23
<uses-permission android:name="android.permission.INTERNET" />
try {
//Construire un tableau à partir du résultat
JSONArray jArray = new JSONArray(text);
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
int id = json_data.getInt("id");
String login = json_data.getString("login");
String password = json_data.getString("pwd");
Student s = new Student(id, login, password);
listOfStudients.add(s);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
EXEMPLE1-SÉLECTION DE DONNÉES: ANALYSER
LES DONNÉES JSON
Imene Sghaier-Développement Mobile Avancé
24
EXEMPLE 2-INSERTION DE DONNÉES: CODE PHP
25
Imene Sghaier-Développement Mobile Avancé
<?php
mysql_connect("host","username","password");
mysql_select_db("University ");
if (isset($_POST['login'])){
$login=$_POST['login'];
$password=$_POST['password'];
$password= md5($password);
$req="INSERT INTO `student` VALUES ( null,'$login',
'$password' )";
$rs = mysqli_query($conn,$req);
if($rs){
$arr['reponse']='oui';
}else{
$arr['reponse']='non‘; }
echo json_encode($arr);
mysqli_close($conn);
}
?>
EXEMPLE 2-INSERTION DE DONNÉES: CODE JAVA
26
Imene Sghaier-Développement Mobile Avancé
public static String addStudentV2(String login, String password) throws IOException
{
String data = URLEncoder.encode("login", "UTF-8") + "="
+ URLEncoder.encode(login, "UTF-8");
data += "&" + URLEncoder.encode("password", "UTF-8") + "="
+ URLEncoder.encode(password, "UTF-8");
String text = "null";
try {
// Définir votre URL
URL url = new URL( "http://imene.alwaysdata.net/demoWS/insert.php");
// Requête d’insertion
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
OutputStreamWriter wr = new OutputStreamWriter(
conn.getOutputStream());
wr.write(data);
wr.flush();
EXEMPLE 2-INSERTION DE DONNÉES: CODE JAVA
27
Imene Sghaier-Développement Mobile Avancé
//Obtenir la réponse du serveur
BufferedReader reader = new BufferedReader(new
InputStreamReader(
conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Lire la réponse du serveur
while ((line = reader.readLine()) != null) {
// Mettre la reponse dans une String
sb.append(line + "n"); }
text = sb.toString();
} catch (Exception ex) { }finally {
try {
reader.close();
} catch (Exception ex) { }
}
EXEMPLE 2-INSERTION DE DONNÉES: CODE JAVA
28
Imene Sghaier-Développement Mobile Avancé
String responseWS="";
try {
JSONObject jo= new JSONObject(text);
responseWS=jo.getString("reponse");
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("responseWS", responseWS);
return responseWS;
}
EXEMPLE3-SUPPRESSION DE DONNÉES: CODE PHP
29
Imene Sghaier-Développement Mobile Avancé
<?php
mysql_connect("host","username","password");
mysql_select_db("University ");
if (isset($_POST['id'])){
$idStudentClicked=$_POST['idStudentClicked'];
$req="delete from student where `id` ='$id'";
$rs = mysqli_query($conn,$req);
if($rs){
$arr['reponse']='oui';
}else{
$arr['reponse']='non‘; }
echo json_encode($arr);
mysqli_close($conn);
}
?>
EXEMPLE 3-SUPPRESSION DE DONNÉE:CODE JAVA
30
Imene Sghaier-Développement Mobile Avancé
public static String deleteStudent(int idStudentClicked) throws IOException {
StringBuilder sb = null;
String data = URLEncoder.encode("idStudentClicked", "UTF-8") + "=" +
URLEncoder.encode(idStudentClicked+"", "UTF-8");
try {
URL url = new URL("http://imene.alwaysdata.net/demoWS/delete.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
OutputStreamWriter wr = new OutputStreamWriter(
conn.getOutputStream());
wr.write(data);
wr.flush();
//Avoir la réponse du seveur
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
sb = new StringBuilder();
String line = null;
String text = "null";
EXEMPLE 3-SUPPRESSION DE DONNÉE: CODE JAVA
31
Imene Sghaier-Développement Mobile Avancé
//lire la réponse du seveur
while ((line = reader.readLine()) != null) {
sb.append(line + "n"); }
text = sb.toString();
} catch (Exception ex) { } finally {
try { reader.close(); } catch (Exception ex) { } }
String responseWS="";
try {
JSONObject jo= new JSONObject(text);
responseWS=jo.getString("reponse");
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("responseWS", responseWS);
return responseWS;
}
RÉFÉRENCES
1. http://www.json.org/jsonfr.html
2. https://github.com/google/gson
3. http://www.helloandroid.com/tutorials/connecting-
mysql-database
4. http://tutorielandroid.francoiscolin.fr/bdd.php
5. http://square.github.io/okhttp/
6. https://stackoverflow.com/questions/4799151/apac
he-http-client-or-urlconnection*/
7. http://jsonviewer.stack.hu/
32

chapitre 3 Android 2.pptx

  • 1.
    INTERACTION AVEC UNE BASEDE DONNÉES DISTANTE 2017-2018 © Imene Sghaier ISET Nabeul SEM3
  • 2.
    2  Objectifs spécifiques S’initier au format JSON  Se familiariser avec la manipulation du format JSON avec l’API Android  Eléments de contenu  Introduction  Architecture Client/Serveur  Connexion d’une application Android à une BD distante  JSON  Exemple  Exemple 1: Récupérer le résultat dans une String  Exemple 2: Insertion de données  Exemple 2: Suppression de données  Volume Horaire :  Cours : 3 heures OBJECTIFS ET ÉLÉMENTS DE CONTENU Imene Sghaier-Développement Mobile Avancé
  • 3.
    INTRODUCTION  Ce coursdécrit la façon d'accéder à une base de données distante sous Android  Il est impossible de se connecter à une base de données distante directement sous android.  La méthode la plus répandue pour se connecter à une base de données à distance à partir d'un appareil Android, est de mettre en place un script PHP (ou n’importe quel langage web) et d'éxécuter ce script en utilisant le protocole HTTP.  Dans ce cours nous allons utiliser une base de données MySQL. On doit alors:  Avoir une connaissance basique des communications entre un serveur et des clients.  Savoir faire des requêtes HTTP depuis une application Android.  Lier un serveur applicatif en PHP avec une base de données MySQL. 3 Imene Sghaier-Développement Mobile Avancé
  • 4.
    4  Introduction  ArchitectureClient/Serveur  Connexion d’une application Android à une BD distante  JSON  Exemple  Exemple 1: Récupérer le résultat dans une String  Exemple 2: Insertion de données  Exemple 2: Suppression de données PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 5.
    ARCHITECTURE CLIENT/SERVEUR  Unearchitecture client/serveur est mise en œuvre à partir du moment où une application a besoin d’un serveur et qu’il faut y centraliser les données pour permettre à d’autres clients de les récupérer.  Ce genre d’architecture est maintenant de plus en plus courante et donc, de plus en plus rare de fonctionner uniquement avec des bases de données locales.  Dans ce cours nous allons utiliser une architecture client/Serveur qui se base sur le protocole HTTP pour la communication 5 Imene Sghaier-Développement Mobile Avancé
  • 6.
    ARCHITECTURE CLIENT-SERVEUR  Lesflèches représentent les requêtes HTTP  Il y a plusieurs types de requêtes, on s'intéresse à 2 types:  GET: C'est la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur une ressource, il doit être possible de répéter la requête sans effet (récupérer des données de la base ).  POST : Cette méthode doit être utilisée si on veut insérer des données (on modifie la ressource) 6 Imene Sghaier-Développement Mobile Avancé
  • 7.
    7  Introduction  ArchitectureClient/Serveur  Connexion d’une application Android à une BD distante  JSON  Exemple  Exemple 1: Récupérer le résultat dans une String  Exemple 2: Insertion de données  Exemple 2: Suppression de données PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 8.
    CONNEXION D’UNE APPLICATIONANDROID À UNE BD DISTANTE 8 (1) (2) (3) (4) (5) Imene Sghaier-Développement Mobile Avancé
  • 9.
    CONNEXION D’UNE APPANDROID À UNE BD DISTANTE  MySQL est utilisé comme une base de données au serveur web et PHP est utilisé pour extraire des données de la base de données.  Notre application va communiquer avec la page PHP avec des paramètres nécessaires (1) puis PHP communique avec la base de données MySQL et va chercher le résultat (2+3) et enfin retourner les résultats pour nous sous le format de données JSON (4+5)  Ici on comprend que notre application Android ne sait communiquer avec notre base de données qu'avec PHP comme intermédiaire 9 Imene Sghaier-Développement Mobile Avancé
  • 10.
    CONNEXION D’UNE APPANDROID À UNE BD DISTANTE  L’application va envoyer des requêtes GET ou POST au script PHP, puis celui-ci va se connecter à la base de données et renvoyer les données requises (au format JSON).  Pour résumer ce que nous allons voir pour accéder à notre BD, nous devons passer par l'intermédiaire de fichiers php :  Android fait un requête vers notre fichier php  Le fichier php fait un requête dans notre BD  Il nous retourne le résultat sous format JSON vers l’application Android  Nous pouvons utiliser les résultats JSON dans notre application Android  Seul le script PHP utilisé pour la connexion à la BD contiendra les identifiants d'accès à la base de données. 10 Imene Sghaier-Développement Mobile Avancé
  • 11.
    11  Introduction  ArchitectureClient/Serveur  Connexion d’une application Android à une BD distante  JSON  Exemple  Exemple 1: Récupérer le résultat dans une String  Exemple 2: Insertion de données  Exemple 2: Suppression de données PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 12.
    JSON JSON (JavaScript ObjectNotation) est un format léger d'échange de données.  Il est facile à lire ou à écrire pour des humains. Il est aisément analysable ou générable par des machines. JSON est un format texte complètement indépendant de tout langage, mais les conventions qu'il utilise seront familières à tout programmeur habitué aux langages descendant du C, comme par exemple : C lui-même, C++, C#, Java, JavaScript, Perl, Python et bien d'autres [1]. Ces propriétés font de JSON un langage d'échange de données idéal. 12 Imene Sghaier-Développement Mobile Avancé
  • 13.
    JSON  C’est unformat totalement indépendant de tout langage. Ce qui le rend un langage d’échange de données idéal.  JSON se base sur deux structures :  Une collection de couples « clés/valeur » connu sous divers langages par un objet, un enregistrement, une structure, un dictionnaire, une table de hachage, une liste typée ou un tableau associatif.  Une liste de valeurs ordonnées, la plupart des langages la nomme par un tableau, un vecteur, une liste ou une suite. Ces structures de données sont universelles. Pratiquement tous les langages de programmation modernes les proposent sous une forme ou une autre. Il est raisonnable qu'un format de données interchangeable avec des langages de programmation se base aussi sur ces structures. 13 Imene Sghaier-Développement Mobile Avancé
  • 14.
    JSON  En JSON,les structures de base prennent les formes suivantes  Un objet, qui est un ensemble de couples nom/valeur non ordonnés. Un objet commence par { (accolade gauche) et se termine par } (accolade droite). Chaque nom est suivi de : (deux-points) et les couples nom/valeur sont séparés par , (virgule).  Un tableau est une collection de valeurs ordonnées. Un tableau commence par [ (crochet gauche) et se termine par ] (crochet droit). Les valeurs sont séparées par , (virgule).  Une valeur peut être soit  une chaîne de caractères entre guillemets,  un nombre,  true ou false ou null  un objet  un tableau. Ces structures peuvent être imbriquées. NB: Une chaîne de caractères est une suite de zéro ou plus caractères Unicode, entre guillemets, et utilisant les échappements avec antislash. Un caractère est représenté par une chaîne d'un seul caractère. 14 Imene Sghaier-Développement Mobile Avancé
  • 15.
    JSON  Exemples ● valeur: ○" Imene" ● tableau: ○ [" Imene", " Aida", " Nejia"] ● objet ○ {" noteDs " :17, " noteEx":15} 15 Imene Sghaier-Développement Mobile Avancé
  • 16.
    JSON VS XML 16 ImeneSghaier-Développement Mobile Avancé
  • 17.
    JSON  Si lenoeud JSON commence avec un [, alors nous devons utiliser la méthode getJSONArray().  Si le noeud JSON commence avec une {, alors nous devons utiliser la méthode getJSONObject(). 17 Imene Sghaier-Développement Mobile Avancé
  • 18.
    18  Introduction  ArchitectureClient/Serveur  Connexion d’une application Android à une BD distante  JSON  Exemples  Exemple 1-Sélection de données  Exemple 2-Insertion de données  Exemple 2-Suppression de données PLAN DU CHAPITRE Imene Sghaier-Développement Mobile Avancé
  • 19.
     Supposons quenous avons une base de données nommée University qui contient une table crée avec la requête suivante : CREATE TABLE ‘Students' ( 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ‘login' VARCHAR( 100 ) NOT NULL, ‘pwd' VARCHAR( 100 ) NOT NULL ); EXEMPLE 1-SÉLECTION DE DONNÉES : CRÉATION DE LA BD 19 Imene Sghaier-Développement Mobile Avancé
  • 20.
     Nous voulonsobtenir la liste des étudiants, pour ceci nous avons écrit le script php suivant EXEMPLE 1-SÉLECTION DE DONNÉES: SCRIPT PHP 20 Imene Sghaier-Développement Mobile Avancé <?php mysql_connect("host","username","password"); mysql_select_db("University "); $q=mysql_query("SELECT * FROM Students"); while($e=mysql_fetch_assoc($q)) $output[]=$e; print( json_encode($output)); mysql_close(); ?>
  • 21.
    EXEMPLE1-SÉLECTION DE DONNÉES:CODE JAVA  Nous pourrons créer une classe Student pour faciliter la manipulation des objets Students dans le code java 21 Imene Sghaier-Développement Mobile Avancé public class Student{ int id; String login, pwd; public Student(int i, String l, String p){ id=i; login=l; pwd=; } //on pourra ajouter des getters et setters et toString() }
  • 22.
    try{ StringBuilder sb =new StringBuilder(); String text = "null"; //pour y mettre le résultat BufferedReader reader = null; //pour lire le resultat ArrayList<Student> listOfStudients = new ArrayList<Student>(); JSONObject json_data; URL url=new URL(“"http://imene.alwaysdata.net/demoWS/script.php"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("GET"); // récupérer la réponse http reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line = null; // lire la réponse du serveur while ((line = reader.readLine()) != null) { // Concatener la ligne suivante dans 1 chaine de caractères sb.append(line + "n"); } text = sb.toString(); } catch (Exception ex) { } finally { reader.close(); } EXEMPLE1-SÉLECTION DE DONNÉES: RÉCUPÉRER LE RÉSULTAT DANS UNE STRING Imene Sghaier-Développement Mobile Avancé 22
  • 23.
    EXEMPLE1-SÉLECTION DE DONNÉES:RÉCUPÉRER LE RÉSULTAT DANS UNE STRING  Remarque: N’oublions pas d’ajouter les permissions nécessaires pour faire une connexion internet Imene Sghaier-Développement Mobile Avancé 23 <uses-permission android:name="android.permission.INTERNET" />
  • 24.
    try { //Construire untableau à partir du résultat JSONArray jArray = new JSONArray(text); for (int i = 0; i < jArray.length(); i++) { json_data = jArray.getJSONObject(i); int id = json_data.getInt("id"); String login = json_data.getString("login"); String password = json_data.getString("pwd"); Student s = new Student(id, login, password); listOfStudients.add(s); } } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } EXEMPLE1-SÉLECTION DE DONNÉES: ANALYSER LES DONNÉES JSON Imene Sghaier-Développement Mobile Avancé 24
  • 25.
    EXEMPLE 2-INSERTION DEDONNÉES: CODE PHP 25 Imene Sghaier-Développement Mobile Avancé <?php mysql_connect("host","username","password"); mysql_select_db("University "); if (isset($_POST['login'])){ $login=$_POST['login']; $password=$_POST['password']; $password= md5($password); $req="INSERT INTO `student` VALUES ( null,'$login', '$password' )"; $rs = mysqli_query($conn,$req); if($rs){ $arr['reponse']='oui'; }else{ $arr['reponse']='non‘; } echo json_encode($arr); mysqli_close($conn); } ?>
  • 26.
    EXEMPLE 2-INSERTION DEDONNÉES: CODE JAVA 26 Imene Sghaier-Développement Mobile Avancé public static String addStudentV2(String login, String password) throws IOException { String data = URLEncoder.encode("login", "UTF-8") + "=" + URLEncoder.encode(login, "UTF-8"); data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); String text = "null"; try { // Définir votre URL URL url = new URL( "http://imene.alwaysdata.net/demoWS/insert.php"); // Requête d’insertion HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); OutputStreamWriter wr = new OutputStreamWriter( conn.getOutputStream()); wr.write(data); wr.flush();
  • 27.
    EXEMPLE 2-INSERTION DEDONNÉES: CODE JAVA 27 Imene Sghaier-Développement Mobile Avancé //Obtenir la réponse du serveur BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; // Lire la réponse du serveur while ((line = reader.readLine()) != null) { // Mettre la reponse dans une String sb.append(line + "n"); } text = sb.toString(); } catch (Exception ex) { }finally { try { reader.close(); } catch (Exception ex) { } }
  • 28.
    EXEMPLE 2-INSERTION DEDONNÉES: CODE JAVA 28 Imene Sghaier-Développement Mobile Avancé String responseWS=""; try { JSONObject jo= new JSONObject(text); responseWS=jo.getString("reponse"); } catch (JSONException e) { e.printStackTrace(); } Log.e("responseWS", responseWS); return responseWS; }
  • 29.
    EXEMPLE3-SUPPRESSION DE DONNÉES:CODE PHP 29 Imene Sghaier-Développement Mobile Avancé <?php mysql_connect("host","username","password"); mysql_select_db("University "); if (isset($_POST['id'])){ $idStudentClicked=$_POST['idStudentClicked']; $req="delete from student where `id` ='$id'"; $rs = mysqli_query($conn,$req); if($rs){ $arr['reponse']='oui'; }else{ $arr['reponse']='non‘; } echo json_encode($arr); mysqli_close($conn); } ?>
  • 30.
    EXEMPLE 3-SUPPRESSION DEDONNÉE:CODE JAVA 30 Imene Sghaier-Développement Mobile Avancé public static String deleteStudent(int idStudentClicked) throws IOException { StringBuilder sb = null; String data = URLEncoder.encode("idStudentClicked", "UTF-8") + "=" + URLEncoder.encode(idStudentClicked+"", "UTF-8"); try { URL url = new URL("http://imene.alwaysdata.net/demoWS/delete.php"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); OutputStreamWriter wr = new OutputStreamWriter( conn.getOutputStream()); wr.write(data); wr.flush(); //Avoir la réponse du seveur BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); sb = new StringBuilder(); String line = null; String text = "null";
  • 31.
    EXEMPLE 3-SUPPRESSION DEDONNÉE: CODE JAVA 31 Imene Sghaier-Développement Mobile Avancé //lire la réponse du seveur while ((line = reader.readLine()) != null) { sb.append(line + "n"); } text = sb.toString(); } catch (Exception ex) { } finally { try { reader.close(); } catch (Exception ex) { } } String responseWS=""; try { JSONObject jo= new JSONObject(text); responseWS=jo.getString("reponse"); } catch (JSONException e) { e.printStackTrace(); } Log.e("responseWS", responseWS); return responseWS; }
  • 32.
    RÉFÉRENCES 1. http://www.json.org/jsonfr.html 2. https://github.com/google/gson 3.http://www.helloandroid.com/tutorials/connecting- mysql-database 4. http://tutorielandroid.francoiscolin.fr/bdd.php 5. http://square.github.io/okhttp/ 6. https://stackoverflow.com/questions/4799151/apac he-http-client-or-urlconnection*/ 7. http://jsonviewer.stack.hu/ 32