Salut à tous,

Bon l'intitulé n'est pas très clair je l'accorde. J'espère que la suite le sera plus (EDIT: Merci qrunk pour les codes):
Je fais une application qui nécessite d'envoyer des données à ma BDD à laquelle j'accède grâce au localhost/phpmyadmin.
J'ai donc créé un code en php qui permet de se connecter à la BDD, et un autre qui permet de lui envoyer des données. Ces codes marchent (testés avec ARC de Google pour ceux qui connaissent).

Côté Android Studio, les données sont censées être envoyées en cliquant sur un bouton qui passe d'une activité à une autre. J'ai créé pour cela une classe "AddDataAsyncTask" qui extends "AsyncTask". C'est à priori la partie "doInBackground" qui nous concerne. Je l'ai récupérée sur un tuto parce que sans Apache (qui a été supprimé sur les dernières versions), je ne trouvais pas comment faire. Je vous met ça en-dessous :


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
protected Void doInBackground(Void... params) {
            Map<String,String> dataToSend = new HashMap<>();
            dataToSend.put("id",hisid);
            dataToSend.put("name", hisname);
            dataToSend.put("age", hisage);
            dataToSend.put("job", hisjob);
            dataToSend.put("gender", hisgender);
            dataToSend.put("date_trip", hisdate);
            dataToSend.put("mode_trip", hismode);
            dataToSend.put("time_trip", histime);
            dataToSend.put("crowded_trip", hiscrowded);
            dataToSend.put("from_trip", hisfrom);
            dataToSend.put("to_trip", histo);
            dataToSend.put("majo_gender",hismajogender);
            dataToSend.put("majo_origin",hismajoorigin);
 
String encodedStr = getEncodedData(dataToSend);
 
            BufferedReader reader = null;
 
            try {
                URL url = new URL(urlAdd);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("POST");
                con.setDoOutput(true);
                OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
                writer.write(encodedStr);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }

Il semblerait que ce soit mon getEncodedData qui ne fonctionne pas... J'ai testé plein de trucs, certains crashent l'appli quand je clique sur le fameux bouton, d'autres ne perturbent pas le fonctionnement de l'appli mais ne modifient pas la base de données. Ca ressemble globalement à ça:


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
private String getEncodedData(Map<String,String> data) {
        StringBuilder sb = new StringBuilder();
        for(String key : data.keySet()) {
            String value = null;
            try {
                value = URLEncoder.encode(data.get(key),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            if(sb.length()>0){
                sb.append("&");
            }
 
            sb.append(key + "=" + value);
        }
 
        return sb.toString();
    }

Franchement je ne sais pas quoi vous dire de plus, j'ai testé plein de trucs, que ce soit de mon imagination ou trouvés sur des forums, mais rien n'y fait, ma base de données est toujours vide. Donc si quelqu'un a déjà fait un truc du genre et est prêt à m'aider ce serait super! N'hésitez pas à me poser des questions quelles qu'elles soient!

Merci,

Jérémy