Connexion base de données Mysql

Résolu/Fermé
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - 22 mars 2015 à 18:42
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 9 avril 2015 à 08:55
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

haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3
9 avril 2015 à 01:22
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
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
9 avril 2015 à 08:55
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
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
23 mars 2015 à 09:43
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
0
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3
24 mars 2015 à 00:01
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 ^_^
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
24 mars 2015 à 09:29
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?
0