Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion a une BDD + affichage valeur de la BDD

    16 février 2021 à 16:36:31

    Bonjour, dans le cadre scolaire je dois réaliser une application qui doit être connecté a une Base de Données et lire des valeurs de la base de données sur mon application réalisée via Android Studio.

    Le problème est que je n'arrive pas à réaliser une connexion entre ma BDD et mon appareil, et je peux donc pas savoir si la suite du programme fonctionne :p .

    J'ai réalisé un script PHP que j'ai glisser dans le fichier www de Wamp64.

    		<?php
    	$con=mysqli_connect("localhost","root","","piscine");
    			if(mysqli_connect_errno())
    			{
    				die(" Error Occured".mysqli_connect_error());
    				
    			}
    		
    		
    			$query = "SELECT * FROM mesure";
    	
    		$results = mysqli_query($con, $query);
    		$piscine_list = array();
    		while($row=mysqli_fetch_assoc($results)){
    			$piscine_list[] = $row;
    		}
    		
    		$response['piscine_list'] = $piscine_list;
    		echo json_encode($response);
    				
    		?>

    J'ai également mis le reste dans mon MainActivity

    private static final String url = "192.168.108./piscineconnect/piscine.php";
    
        private TextView Temperature, pH, Chlore;
        String temp,ph,chlore;
    
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final ProgressDialog pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Patientez");
            pDialog.setCancelable(false);
            pDialog.show();
            StringRequest request = new StringRequest(url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    pDialog.dismiss();
                    try {
                        JSONObject jobject = new JSONObject(response);
                        JSONArray itemArray = jobject.getJSONArray("piscine_list");
    
                        //Json code for category
    
                        int j=0;
                        for (int i = 0; i < itemArray.length(); i++) {
    
                            JSONObject catobject = itemArray.getJSONObject(i);
    
    
                            temp = catobject.getString("Temperature");
                            ph = catobject.getString("pH");
                            chlore=catobject.getString("Chlore");
    
                        }
                        GridLayoutManager manager = new GridLayoutManager(MainActivity.this,1);
                        Temperature.setText(String.valueOf(temp));
                        pH.setText(String.valueOf(ph));
                        Chlore.setText(String.valueOf(chlore));
    
                    } catch (JSONException e) {
                        e.printStackTrace();
    
                    }
    
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this, "Retry", Toast.LENGTH_SHORT).show();
                }
            });
            RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
            queue.add(request);



    Si une ame charitable passant dans le coin veuillent bien m'aidez , ce serait avec plaisir !

    Merci et bonne fin de journée à tous.

    • Partager sur Facebook
    • Partager sur Twitter
      16 février 2021 à 19:32:57

      Salut,

      peux-tu donner plus d'informations / exception sur ton soucis ?

      • problème pour appeler le script PHP depuis JAVA ?
      • problème dans le PHP pour établir une connexion vers la base de données ? As-tu essayé d'appeler le script PHP directement ?
      private static final String url = "192.168.108./piscineconnect/piscine.php";

      tu as essayé de spécifier le protocol http ou https ? Il ne manque pas un numéro dans l'IP ?

      -
      Edité par rybla 16 février 2021 à 19:33:58

      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2021 à 19:09:39

        Bonjour, (désolé de répondre que maintenant)

        Je pense que le problème vient du script Java, j'ai bricolé quelque chose permettant d'afficher un type de barre de chargement si la connexion ne s'effectue pas.


        Avez-vous une idée pour vérifier si le problème ne vient pas du script PHP ?

        L’enlèvement des derniers chiffres de mon adresse IP était volontaire (on sait jamais :p), oui j'ai essayé en passant direct via le script PHP, en mettant http, en mettant le numéro de port du serveur après l'adresse IP...

        Merci beaucoup.

        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2021 à 19:18:46

          les IPs avec le format 192.168.X.X sont privées, il n'y a pas de risque.

          Tu peux vérifier le script PHP en ouvrant dans chrome l'URL http://192.168.108./piscineconnect/piscine.php . Tu as essayé de spécifier le protocol http:// dans le fichier .java ? 

          P.S: As-tu un message d'exception côté Java ? Que nous puissions t'aider plus facilement ?

          -
          Edité par rybla 18 février 2021 à 20:55:41

          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2021 à 21:07:36

            D'accord, je les fait et voici ce qui j'ai : si je me fie a mon code PHP je présume que c'est bien le PHP qui ne pose

            pas problème ?

            (je ne sais pas si vous pouvez voir l'image, mais j'ai un "piscine_list" en retour

            -
            Edité par AlexBrdn 19 février 2021 à 16:48:36

            • Partager sur Facebook
            • Partager sur Twitter
              19 février 2021 à 18:12:05

              Nous allons prendre les problèmes un par an.

              AlexBrdn a écrit:

              D'accord, je les fait et voici ce qui j'ai : si je me fie a mon code PHP je présume que c'est bien le PHP qui ne pose

              pas problème ?


              1. Le script PHP fonctionne correctement mais la liste des températures est vide. Nous devrions avoir une liste avec plusieurs valeurs non ?

              2. As-tu une erreur côté Java ? Quel est le comportement attendu (si j'ai bien compris, tu souhaites afficher l'ensemble des températures) ? 

              • Partager sur Facebook
              • Partager sur Twitter
                19 février 2021 à 23:44:03

                1. Oui pardon je n'ai pas fait attention, mais j'ai bien les valeurs marqué à coté

                2. Du coté JAVA je n'ai aucun message d'erreur qui s'affiche, je travaille avec une vrai tablette et non un émulateur (mon PC n'est pas surpuissant et l'émulateur a des applications qui se mettent en défaut...), et quand je lance l'application réellement, j'ai donc le chargement "Patientez" qui tournent indéfini, et une fois que l'application se connecte à la base de données, le message "Patientez" doit s'enlever et laisser apparaitre les valeurs (si je l'ai bien codée)

                • Partager sur Facebook
                • Partager sur Twitter
                  20 février 2021 à 12:14:08

                  Je viens de m'installer un environnement Android pour comprendre plus facilement ton soucis.

                  Si j'ai bien compris, tu ne peux pas debugger le code et tu travaille directement sur une tablette ? (Vraiment pas pratique si tu veux mon avis). Peux-tu remplacer ton code par:

                          StringRequest request = new StringRequest(url, new Response.Listener<String>() {
                  
                              @Override
                              public void onResponse(String response) {
                                  pDialog.setMessage(response);
                              }
                  
                          }, new Response.ErrorListener() {
                  
                              @Override
                              public void onErrorResponse(VolleyError error) {
                                  pDialog.setMessage(error.getMessage());
                              }
                  
                          });

                  Ainsi nous verrons l'erreur dans la popup de dialog ou le json arriver ;). J'attends ta réponse pour décider de la suite.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 février 2021 à 18:42:11

                    Enfaite je ne code pas sur la tablette directement, j'utilise Android Studio sur mon PC pour coder l'application... et pour "téléverser" l'application ,au lieu d'utiliser l'émulateur Android Studio (qui est gourmand en RAM) je téléverse directement sur un vraie tablette.

                    J'ai remplacer mon code par le votre, mais ça m'a donné pas mal d'erreur... :(

                    public class MainActivity extends AppCompatActivity {
                    
                        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
                    
                            @Override
                            public void onResponse(String response) {
                                pDialog.setMessage(response);
                            }
                    
                        }, new Response.ErrorListener() {
                    
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                pDialog.setMessage(error.getMessage());
                            }
                    
                        });

                    Peut-etre ai-je supprimer trop de choses de mon code initial ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 février 2021 à 19:20:32

                      il ne fallait remplacer que la partie new StringRequest(....); et garder ce qu'il y avait avant et après.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 février 2021 à 20:45:47

                        D'accord merci !

                        Le message pop-up s'affichant est "java.io.IOException: Cleartext HTTP traffic to 192.168.0.17 not permitted".

                        2. J'ai regardé sur Google et j'ai ajouté un "android:usesCleartextTraffic="true"" ce qui m'affiche un autre message maintenant "java.net.ConnectException:Failed to connect to /192.168.0.17:80"

                        Le 80 fait-il référence au port de la base de données ?

                        Edit: le port 80 est le port HTTP :D

                        -
                        Edité par AlexBrdn 20 février 2021 à 21:04:22

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 février 2021 à 23:56:27

                          Si tu as un autre PC sur le réseau ou depuis le chrome de ta tablette, tu peux ouvrir URL ?

                          Je pense que le problème vient du serveur web (mais impossible de le confirmer pour le moment).

                          Dans le fichier

                          Peux-tu:

                          • ouvrir le répertoire d'installation de wamp
                          • puis ouvrir le fichier .\bin\apache\apache2.4.XX\conf\httpd.conf
                          • vérifier que ton serveur écoute bien sur 0.0.0.0:80 (je te laisse chercher sur internet)
                          • puis ouvrir le fichier .\bin\apache\apache2.4.XX\conf\extra\httpd-vhosts.conf et remplacer la ligne
                          Require local
                          par
                          Require ip 192.168.0.0/16

                          et relancer ton serveur.

                          La directive Require local veut dire que la connexion doit venir de localhost et là nous disons les IPs qui sont sur le réseau 192.168.X.X

                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 février 2021 à 9:58:42

                            D'accord, mon serveur lisé bien le 0.0.0.0:80 et le require à était changé.

                            Maintenant j'ai une pop-up marquant "java.lang.RuntimeException : bad URL 192.168.0.13/piscineconnect/piscine.php" ?

                            Aussi petite question, dans le fichier httpd.conf dans une balise "directory" il y a :     AllowOverride none
                                Require all denied

                            Cela peut-il avoir un lien ?

                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 février 2021 à 10:11:45

                              Tu peux poster la nouvelle version de ton code Java ? Sans le modifier stp ? 

                              Tu as bien http:// devant l'URL ?

                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 février 2021 à 12:07:11

                                private static final String url = "192.168.108./piscineconnect/piscine.php";
                                 
                                    private TextView Temperature, pH, Chlore;
                                    String temp,ph,chlore;
                                 
                                 @Override
                                    protected void onCreate(Bundle savedInstanceState) {
                                        super.onCreate(savedInstanceState);
                                        setContentView(R.layout.activity_main);
                                 
                                        final ProgressDialog pDialog = new ProgressDialog(MainActivity.this);
                                        pDialog.setMessage("Patientez");
                                        pDialog.setCancelable(false);
                                        pDialog.show();
                                StringRequest request = new StringRequest(url, new Response.Listener<String>() {
                                
                                            @Override
                                            public void onResponse(String response) {
                                                pDialog.setMessage(response);
                                            }
                                
                                        }, new Response.ErrorListener() {
                                
                                            @Override
                                            public void onErrorResponse(VolleyError error) {
                                                pDialog.setMessage(error.getMessage());
                                            }
                                
                                        });
                                        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
                                        queue.add(request);

                                J'avais oublié le ttp:// devant pardon

                                Maintenant j'ai la pop-up "Patientez" qui réapparait, et après quelques secondes le message disparait mais la pop-up restent présente

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Connexion a une BDD + affichage valeur de la BDD

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown