Contexte
Ce projet utilise le Framework Android Studio, une base de données stockée sur alwaysdata ainsi qu’une API rest créé par moi-même. Cette API à était codé grâce au langage de programmation nommé PHP.
L’application Android devait permettre de se connecter par rapport aux mots de passes et logins présent dans la base. Une fois connecté, l’utilisateur a le choix entre 3 propositions qui sont Ajouter, Consulter et Modifier des visiteurs comme ci-dessous.

L'API
Tout d’abord, j’ai créé un fichier PHP qui permet de se connecter à la base de données pour que les autres fichiers puisse l’utiliser pour exécuter les requêtes. Les caractères spéciaux ‘*’, dans le code, sont remplacés par les vraies informations relatives à la connexion à la base.
Nous allons voir le code permettant d’ajouter un visiteur. Tout d’abord, on récupère toutes les informations présentes dans le lien grâce à la méthode ‘POST‘. Ensuite, on effectue la connexion à la base grâce au fichier conn.php vu précédemment. On réalise une requête préparée pour limiter les risques d’injections SQL. Ensuite, on remplace les paramètres par leur valeur grâce à la procédure ‘bindParam‘. Enfin, on exécute cette requête pour pouvoir ajouter ce nouveau visiteur.
prepare($req);
$stm->bindParam(":id",$id);
$stm->bindParam(":nom",$nom);
$stm->bindParam(":prenom",$prenom);
$stm->bindParam(":login",$login);
$stm->bindParam(":mdp",$mdp);
$stm->bindParam(":adresse",$rue);
$stm->bindParam(":cp",$cp);
$stm->bindParam(":ville",$ville);
$stm->bindParam(":dateEmbauche",$date);
$res = $stm->execute();
print($res);
} catch (PDOException $e){
print "Erreur !:".$e->getMessage();
die();
}
?>
Code Java pour ajouter un visiteur
Tout d’abord, on utilise une class nommé Visiteur qui permet de créer des Visiteur. Cette class contient tous les getters et setters de chaque propriété ainsi qu’une méthode toString comme ci-dessous.
public class Visiteur {
private String id, nom, prenom, login, mdp, rue, cp, ville, dateEmbauche;
/**
* Constructeur de la classe Visiteur
* @param id
* @param nom
* @param prenom
* @param login
* @param mdp
* @param rue
* @param cp
* @param ville
* @param dateEmbauche
*/
public Visiteur(String id, String nom, String prenom, String login, String mdp, String rue, String cp, String ville, String dateEmbauche) {
this.id = id;
this.nom = nom;
this.prenom = prenom;
this.login = login;
this.mdp = mdp;
this.rue = rue;
this.cp = cp;
this.ville = ville;
this.dateEmbauche = dateEmbauche;
}
public Visiteur() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getMdp() {
return mdp;
}
public void setMdp(String mdp) {
this.mdp = mdp;
}
public String getRue() {
return rue;
}
public void setRue(String rue) {
this.rue = rue;
}
public String getCp() {
return cp;
}
public void setCp(String cp) {
this.cp = cp;
}
public String getVille() {
return ville;
}
public void setVille(String ville) {
this.ville = ville;
}
public String getDateEmbauche() {
return dateEmbauche;
}
public void setDateEmbauche(String dateEmbauche) {
this.dateEmbauche = dateEmbauche;
}
@Override
public String toString() {
return id + ", " + nom + " " + prenom;
}
}
Ensuite, on utilise un fichier visiteurDAO qui contient la fonction addVisiteur permettant d’ajouter un visiteur dans la base de données en fonction de l’objet de la class visiteur donnée en paramètre de celle-ci. On utilise donc l’API créée précédemment grâce au lien présent à la ligne 4. Puis on ajoute les paramètres au lien pour que l’API fasse le reste. Cependant, pour réaliser cette action, on a besoin du fichier HttpPostRequest qui nous a été donné pendant la réalisation du projet. Vous pouvez le retrouver ci-dessous
public String addVisiteur(Visiteur unVisiteur) {
String result = "";
//adresse de l'URL de l\'API à interroger et fichier php permettant d'\ajouter le visiteur
String myUrl="https://quessette.alwaysdata.net/API/ajouterVisiteur.php";
//informations à transmettre pour effectuer l'ajout
String params =
"id="+unVisiteur.getId()+"&nom="+unVisiteur.getNom()+
"&prenom="+unVisiteur.getPrenom()+
"&login="+unVisiteur.getLogin()+
"&mdp="+unVisiteur.getMdp()+
"&rue="+unVisiteur.getRue()+
"&cp="+unVisiteur.getCp()+
"&ville="+unVisiteur.getVille()+
"&date="+unVisiteur.getDateEmbauche();
Log.d("requete",params);
HttpPostRequest postRequest = new HttpPostRequest();
try{
result = postRequest.execute(new String []{myUrl, params}).get();
}
catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
Log.d("resultat",result);
return result;
}
public class HttpPostRequest extends AsyncTask{
public static final String REQUEST_METHOD = "POST";
public static final int READ_TIMEOUT = 15000;
public static final int CONNECTION_TIMEOUT = 15000;
private HttpURLConnection connection;
@Override
protected String doInBackground(String... params) {
String targetURL = params[0];
String urlParameters = params[1];
Log.d("url",targetURL);
Log.d("urlParametres",urlParameters);
URL url;
connection = null;
try {
//Create connection
url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "fr-FR");
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes (urlParameters);
wr.flush ();
wr.close ();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
Log.d("reponse",response.toString());
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if(connection != null) {
connection.disconnect();
}
}
}
}
Enfin, on utilise le fichier AjoutActivity permettant d’afficher la vue correspondant à cette activity. Il permet aussi de récupérer toutes les composantes de la vue comme les editText, les boutons … Ensuite, suivant le bouton sur lequel l’utilisateur clique, une action s’effectue. Cette action peut être l’ajout (ligne 31 à 54) en utilisant la class visiteurDAO ou le retour aux propositions (ligne 58 à 62) en utilisant un ‘intent‘ pour lancer l’activity correspondante.
public class AjoutActivity extends AppCompatActivity implements View.OnClickListener{
private EditText editId, editNom, editPrenom, editLogin, editMdp, editRue, editCp, editVille, editDateEmbauche;
private Button b1, b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ajout);
init();
}
public void init(){
editId=findViewById(R.id.id);
editNom=findViewById(R.id.nom);
editPrenom=findViewById(R.id.prenom);
editLogin=findViewById(R.id.loginA);
editMdp=findViewById(R.id.mdpA);
editRue=findViewById(R.id.rue);
editCp=findViewById(R.id.cp);
editVille=findViewById(R.id.ville);
editDateEmbauche=findViewById(R.id.dateEmbauche);
b1=findViewById(R.id.validerAjout);
b1.setOnClickListener(this);
b2=findViewById(R.id.retourAjout);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v==b1){
VisiteurDAO visiteurAcces = new VisiteurDAO();
String id=editId.getText().toString();
String nom=editNom.getText().toString();
String prenom=editPrenom.getText().toString();
String login=editLogin.getText().toString();
String mdp=editMdp.getText().toString();
String rue=editRue.getText().toString();
String cp=editCp.getText().toString();
String ville=editVille.getText().toString();
String dateEmbauche=editDateEmbauche.getText().toString();
Visiteur visiteur=new Visiteur(id, nom, prenom, login, mdp, rue, cp, ville, dateEmbauche);
visiteurAcces.addVisiteur(visiteur);
//verif();
Snackbar.make( b1, "ajout ok", Snackbar.LENGTH_LONG).setAction("Retourner aux propositions", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(getApplicationContext(), PropositionActivity.class);
startActivity(i);
Log.d("ajout", visiteur.toString());
}
}).show();
}
if(v==b2){
Intent i=new Intent(this, PropositionActivity.class);
startActivity(i);
Log.d("ajout else", "erreur");
}
}
}
Quelques rendus
La connexion

Affichage de la liste des visiteurs

La consultation

La modification avec une liste déroulante


L'ajout

Langages utilisés



Outils utilisés


