Connexion base de données Mysql

Résolu/Fermé
Signaler
Messages postés
67
Date d'inscription
dimanche 20 juillet 2014
Statut
Membre
Dernière intervention
11 janvier 2016
-
Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
-
Bonjour tout le monde.
Je viens de commencer une application android sous windows 7 (première expérience avec android) , et je suis arrivée au stade de la connexion avec la base de données (je travaille avec Mysql) .
Je n'arrive pas à connecter ma base et je bloque dessus il y a 4 jours.
Est-ce que quelqu'un pourrait m'aider? Je dois vraiment avancer!
Voilà mon code:
PHP code
<?php

$link=mysql_connect("localhost","root",""); //Connexion au serveur
if(!$link)
{
die('Erreur connexion'.mysql_error());
}

$Db_Select=mysql_select_db('wtf',$link);  //Connexion à la base de données

/*************************************************************************/

$sql='SELECT * FROM shape ';
$req=mysql_query($sql) or die('SQL ERROR'.$sql.mysql_error());
  while($row=mysql_fetch_array($req))
  $output[]=$row;
  print(json_encode($output));
  
  mysql_close($link);

?>

Activité Hfood.java:
package com.example.pomme.wtf;


import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


public class Hfood extends ActionBarActivity {

    private TextView responseTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hfood);


        responseTextView = (TextView) this.findViewById(R.id.dbcont);


        new GetAllCustomerTask().execute(new connect());


    }

    public void setTextToTextView(JSONArray jsonArray)
    {
        String s  = "";
        for(int i=0; i<jsonArray.length();i++){

            JSONObject json = null;
            try {
                json = jsonArray.getJSONObject(i);
                s = s +
                        "IdShape : "+json.getInt("IdShape")+"\n"+
                        "Shape : "+json.getString("Shape")+"\n"+"\n\n";
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        this.responseTextView.setText(s);

    }


    private class GetAllCustomerTask extends AsyncTask<connect,Long,JSONArray>
    {
        @Override
        protected JSONArray doInBackground(connect... params) {

            // it is executed on Background thread

            return params[0].GetAllCustomers();
        }

        @Override
        protected void onPostExecute(JSONArray jsonArray) {

            setTextToTextView(jsonArray);


        }
    }
}

Classe java connect.java:
package com.example.pomme.wtf;


import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;

import java.io.IOException;
/**
 * Created by Pomme on 17/03/2015.
 */
public class connect {


    public JSONArray GetAllCustomers()
    {
        // URL for getting all customers


        String url = "http://10.0.2.2/wtf/connect.php" ;
        // Get HttpResponse Object from url.
        // Get HttpEntity from Http Response Object

        HttpEntity httpEntity = null;

        try
        {

            DefaultHttpClient httpClient = new DefaultHttpClient();  // Default HttpClient
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);

            httpEntity = httpResponse.getEntity();



        } catch (ClientProtocolException e) {

            // Signals error in http protocol
            e.printStackTrace();

            //Log Errors Here



        } catch (IOException e) {
            e.printStackTrace();
        }


        // Convert HttpEntity into JSON Array
        JSONArray jsonArray = null;

        if (httpEntity != null) {
            try {
                String entityResponse = EntityUtils.toString(httpEntity);

                Log.e("Entity Response  : ", entityResponse);

                jsonArray = new JSONArray(entityResponse);

            } catch (JSONException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return jsonArray;
    }
}


P.S Je travaille avec Android Studio

Merci d'avance ^_^

2 réponses

Messages postés
67
Date d'inscription
dimanche 20 juillet 2014
Statut
Membre
Dernière intervention
11 janvier 2016
3
J'ai finalement trouvé la solution!! En fait le problème était dans l'url.
1) J'avais mis une adresse ip erronée. Pour avoir votre adresse ip locale, tapez "ipconfig" (si vous êtes sur windows) dans le cmd (invité de commande), et prenez le ipv4.
2) Normalement, on doit mettre le port de localhost (8080/80=>port par défaut). En effet ce n'est pas nécessaire de le mettre si vous avez le port par défaut, mais si ce n'est pas le cas, vous devez mettre le nouveau port.Dans mon cas c'est 82.
Ce qui donne l'url suivant:

String url="192.168.1.12:82/connect.php" ;

3) Il faut aussi ajouter la permission internet dans le fichier manifest (xml) dans votre application sur android studio
=>Et si après tout cela ça ne fonctionne toujours pas, il faut éditer le fichier httpd.conf de Apache du wamp et mettre au lieu de "Allow for 127.0.0.1" "Allow for all".

Voilà c'est ce que j'ai fait, et maintenant ça marche comme sur des roulettes. ^_^
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
3 791
D'où ce que je te disais:
As-tu tester en debug côté Android pour voir si la requête part bien et pour voir quelle réponse obtiens-tu?

--> Ne pas sous-estimer le mode debug...et ne pas hésiter à utiliser des echo côté serveur
Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
3 791
Bonjour,

Quelques remarques:
- dire qu'on travaille avec Android et MySQL est un non-sens pour plusieurs raisons: d'abord, sur les téléphones c'est du sqlite; ensuite peut importe ton type de bdd sur ton serveur, ton appli n'y a pas directement accès Ce qui m'amène au 2e point
- ce n'est pas à l'appli mobile de gérer les connexions avec la bdd, c'est au serveur. L'appli utilise des webservices de type get/set et c'est tout. C'est côté PHP où tu va gérer les interactions avec ta base
Messages postés
67
Date d'inscription
dimanche 20 juillet 2014
Statut
Membre
Dernière intervention
11 janvier 2016
3
Merci BunoCS d'avoir répondu et merci aussi pour les conseils, c'est noté ^_^.
Par contre est-ce que vous n'avez pas une idée sur ce qui cloche dans mon code et qui fait que la connexion à ma bdd ne s'établie pas?
Merci ^_^
Messages postés
15192
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
7 décembre 2021
3 791
En regardant le code en diagonale, bien qu'il ne soit pas très très propre, la requête devrait se lancer... Le PHP, je ne maîtrise pas...
As-tu tester en debug côté Android pour voir si la requête part bien et pour voir quelle réponse obtiens-tu?