IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Connexion d'une application Android à une BDD externe (mais pas avec PHP)


Sujet :

API standards et tierces Android

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 58
    Points
    58
    Par défaut Connexion d'une application Android à une BDD externe (mais pas avec PHP)
    Salut,
    Donc je cherche à connecter une application Android à une base de données externe .
    Sur le net presque tous les exemples utilisent php coté serveur , et comme je suis un développeur java ça m’aidait de trouver des exemples en JSP .
    Mais en général j'aimerai avoir une idée sur les différentes méthodes pour connecter une application Android à une base de données externe ( webservice par exemple ou autre).
    merci à vous.

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Bah y'a plein d'options...

    - En direct: l'appli cliente se connecte directement vers la db en jdbc. Rapide à implémenter, soucis de sécurité, de scalabilité,
    - En n-tiers: l'appli se connecte, par exemple en REST, à une webapp (php, java, .net, etc.). Donc dialogue FRONT->rest/http->BACK->jdbc/tcp->DATABASE

    Pour faire une webapp Java: http://lfe.developpez.com/Java/TomCat/?page=page_4
    Pour faire du REST: http://mbaron.developpez.com/soa/jaxrs/
    Pour faire du jdbc: http://jguillard.developpez.com/JDBC/
    Et aussi : Tutoriels Android et Tutoriels Java.

    vouala
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Merci Pill_S pour ta réponse .
    Voici le genre d'exemple que je cherche http://webdesignergeeks.com/mobile/a...ith-remote-db/

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'exemple que tu donnes présente également la solution java, à base de servlet (et non de jsp comme indiqué) juste après l'exemple php, mais cet exemple est un peu bidon. Déjà dans l'exemple php, il y a au moins la partie "db", sous forme de requête SQL, alors que cette partie est remplacé par un test de nom d'utilisateur et de mot de passe en dur (et en clair !) : c'est cette partie qui se fait via JDBC côté serveur. Ensuite, le billet ne donne que le code de la partie connexion, sans expliquer comment paramétrer son serveur, la servlet, etc...

    Les liens que te donne @Pill_s t'expliquent justement ce qu'il manque. Le premier inidque justement comment installer et paramétrer une servlet dans un tomcat. Le second est une solution similaire à celle donnée dans ton lien, mais plus sophistiquée, mais peut être pas forcément directement adaptable sur android facilement quand on débute. Le troisième indique comment se connecter à une base de données et faire des requêtes SQL et permet de remplacer la partie bidon du code de la servlet présentée dans ton lien. Tu n'as pas ici de tutoriel qui te donne une solution que tu as juste à télécharger et à exécuter : il faut assembler les différents exemples donnés et les adapter à ton contexte et ça nécessite de bien les comprendre. Il faut que tu travaille chaque tutoriel pour comprendre leur principe, afin de fabriquer au final ton application.

    Tu peux probablement utiliser ton tutoriel pour la partie android client, ou regarder ce tutoriel sur Developpez, plus complet, mais dont la partie serveur est gérée par du php. Il y a d'autres tutoriels sur Developpez (ainsi que les FAQs) que tu pourras consulter pour construire application, comme http://christophej.developpez.com/tu...ee/pooltomcat/ par exemple, qui d'indiquera comment faire la partie servlet d'accès la base, en ajoutant la notion de pool de connexion.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Salut joel.drigo et merci pour ta réponse
    Au fait je suis développeur d’application web en java , donc l’accès à une base de données depuis une application web ( qui dans mon cas tourne sous tomcat) je connais très bien.
    C’est plutôt la liaison entre une application Android et le serveur qui m’intéresse, et c’est pour ça que j’ai trouvé le lien que j’ai posté intéressant (même si le test d’existence de l’utilisateur est bidon car ça je sais le faire). Et à mon avis c’est plus facile à réaliser qu’une solution qui utilise un web service ,déjà parce que je n’ai aucune notion sur les web service. Mais j’aimerai bien trouvé un exemple du même genre en qui utilise un web service .
    J’aimerai aussi connaitre les avantages et les inconvenants de chaque solution .

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par SaladinDev Voir le message
    Mais j’aimerai bien trouvé un exemple du même genre en qui utilise un web service .
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    J’essaye d’implémenter l’exemple du lien que j’ai posté . J’ai crée un petit projet web avec une seule Servlet que j’ai déployé sur un serveur TOMCAT sur un PC . Et Coté Android j’ai ce code
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    package dz.dzsoty.mysqlcrud;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.util.ArrayList;
     
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.params.ConnManagerParams;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;
     
    public class CustomHttpClient {
    	/** The time it takes for our client to timeout */
        public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds
     
        /** Single instance of our HttpClient */
        private static HttpClient mHttpClient;
     
        /**
         * Get our single instance of our HttpClient object.
         *
         * @return an HttpClient object with connection parameters set
         */
        private static HttpClient getHttpClient() {
            if (mHttpClient == null) {
                mHttpClient = new DefaultHttpClient();
                final HttpParams params = mHttpClient.getParams();
                HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
                HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
                ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
            }
            return mHttpClient;
        }
     
        /**
         * Performs an HTTP Post request to the specified url with the
         * specified parameters.
         *
         * @param url The web address to post the request to
         * @param postParameters The parameters to send via the request
         * @return The result of the request
         * @throws Exception
         */
        public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
            BufferedReader in = null;
            try {
                HttpClient client = getHttpClient();
                HttpPost request = new HttpPost(url);
                UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
                request.setEntity(formEntity);
                HttpResponse response = client.execute(request);
                in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
     
                StringBuffer sb = new StringBuffer("");
                String line = "";
                String NL = System.getProperty("line.separator");
                while ((line = in.readLine()) != null) {
                    sb.append(line + NL);
                }
                in.close();
     
                String result = sb.toString();
                return result;
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
     
        /**
         * Performs an HTTP GET request to the specified url.
         *
         * @param url The web address to post the request to
         * @return The result of the request
         * @throws Exception
         */
        public static String executeHttpGet(String url) throws Exception {
            BufferedReader in = null;
            try {
                HttpClient client = getHttpClient();
                HttpGet request = new HttpGet();
                request.setURI(new URI(url));
                HttpResponse response = client.execute(request);
                in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
     
                StringBuffer sb = new StringBuffer("");
                String line = "";
                String NL = System.getProperty("line.separator");
                while ((line = in.readLine()) != null) {
                    sb.append(line + NL);
                }
                in.close();
     
                String result = sb.toString();
                return result;
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    et
    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
    package dz.dzsoty.mysqlcrud;
     
    import java.util.ArrayList;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Toast;
     
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
     
    public class MainActivity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
     
    	public void onTestClick(View view){
        	ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
        	postParameters.add(new BasicNameValuePair("paramName", "Test"));
     
    		try {
    			CustomHttpClient.executeHttpPost("http://192.168.1.5:8081/MySqlCRUD/ListePersonne", postParameters);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    }
    J'obtiens cette erreur :
    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
    07-25 15:03:52.092: I/System.out(27140): main calls detatch()
    07-25 15:03:52.097: W/System.err(27140): android.os.NetworkOnMainThreadException
    07-25 15:03:52.117: W/System.err(27140): 	at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1156)
    07-25 15:03:52.122: W/System.err(27140): 	at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
    07-25 15:03:52.122: W/System.err(27140): 	at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
    07-25 15:03:52.127: W/System.err(27140): 	at libcore.io.IoBridge.connect(IoBridge.java:112)
    07-25 15:03:52.127: W/System.err(27140): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    07-25 15:03:52.132: W/System.err(27140): 	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
    07-25 15:03:52.132: W/System.err(27140): 	at java.net.Socket.connect(Socket.java:843)
    07-25 15:03:52.137: W/System.err(27140): 	at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
    07-25 15:03:52.137: W/System.err(27140): 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
    07-25 15:03:52.142: W/System.err(27140): 	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:167)
    07-25 15:03:52.142: W/System.err(27140): 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:125)
    07-25 15:03:52.147: W/System.err(27140): 	at org.apache.http.impl.client.DefaultRequestDirector.executeOriginal(DefaultRequestDirector.java:1179)
    07-25 15:03:52.147: W/System.err(27140): 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:644)
    07-25 15:03:52.152: W/System.err(27140): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    07-25 15:03:52.152: W/System.err(27140): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    07-25 15:03:52.157: W/System.err(27140): 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    07-25 15:03:52.157: W/System.err(27140): 	at dz.dzsoty.mysqlcrud.CustomHttpClient.executeHttpPost(CustomHttpClient.java:59)
    07-25 15:03:52.162: W/System.err(27140): 	at dz.dzsoty.mysqlcrud.MainActivity.onTestClick(MainActivity.java:27)
    07-25 15:03:52.162: W/System.err(27140): 	at java.lang.reflect.Method.invokeNative(Native Method)
    07-25 15:03:52.162: W/System.err(27140): 	at java.lang.reflect.Method.invoke(Method.java:515)
    07-25 15:03:52.167: W/System.err(27140): 	at android.view.View$1.onClick(View.java:3964)
    07-25 15:03:52.167: W/System.err(27140): 	at android.view.View.performClick(View.java:4633)
    07-25 15:03:52.172: W/System.err(27140): 	at android.view.View$PerformClick.run(View.java:19330)
    07-25 15:03:52.172: W/System.err(27140): 	at android.os.Handler.handleCallback(Handler.java:733)
    07-25 15:03:52.177: W/System.err(27140): 	at android.os.Handler.dispatchMessage(Handler.java:95)
    07-25 15:03:52.177: W/System.err(27140): 	at android.os.Looper.loop(Looper.java:157)
    07-25 15:03:52.182: W/System.err(27140): 	at android.app.ActivityThread.main(ActivityThread.java:5356)
    07-25 15:03:52.182: W/System.err(27140): 	at java.lang.reflect.Method.invokeNative(Native Method)
    07-25 15:03:52.182: W/System.err(27140): 	at java.lang.reflect.Method.invoke(Method.java:515)
    07-25 15:03:52.187: W/System.err(27140): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
    07-25 15:03:52.187: W/System.err(27140): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
    07-25 15:03:52.192: W/System.err(27140): 	at dalvik.system.NativeStart.main(Native Method)
    07-25 15:03:52.192: I/Choreographer(27140): Skipped 554 frames!  The application may be doing too much work on its main thread.
    D'aprés ce que j'ai compris en faisant des recherches sur cette exception , on peut pas lancer certaines opréations depuis le Thread principal . Mais je n'arrive pas à trouver ce qu'il faut faire exactement .

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Peut être lancer un thread séparé?

    Ex: http://davy-leggieri.developpez.com/...-thread/#LVI-D
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    Merci Pill_S, c'est que j'ai fait et ça marche.
    J'ai crée une nouvelle classe MyAsynTask :
    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
     
    public class MyAsynTask extends AsyncTask<Void, Integer, Void> {
     
    	@Override
    	protected Void doInBackground(Void... arg0) {
    		ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
    		postParameters.add(new BasicNameValuePair("paramName", "Test"));
     
    		try {
    			CustomHttpClient.executeHttpPost(
    					"http://192.168.1.5:8081/MySqlCRUD/ListePersonne",
    					postParameters);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return null;
     
    	}
    }
    et pour le main Activity
    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
     
    public class MainActivity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
     
    	public void onTestClick(View view){
    		 MyAsynTask myAsyncTask = new  MyAsynTask();
    		 myAsyncTask.execute();
    	}
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment utiliser une API dans une application Android
    Par La March dans le forum Android
    Réponses: 7
    Dernier message: 18/06/2014, 10h16
  2. Réponses: 3
    Dernier message: 02/02/2014, 22h17
  3. Créer une vidéo dans une application android
    Par Heshmi dans le forum Android
    Réponses: 3
    Dernier message: 07/03/2011, 15h13
  4. Réponses: 7
    Dernier message: 06/11/2008, 16h38
  5. [Joomla!] passer d'une application locale à une application web sur Joomla
    Par Gabrieel dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 15/05/2008, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo