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

Android Discussion :

Projet application Mastermind


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut Projet application Mastermind
    Bonjour à tous,

    Je suis actuellement en école d'ingénieur, et j'ai un petit projet semestriel qui consiste à créer un équivalent du jeu Mastermind sur Android. Jusque là, je n'ai pas spécialement de problème, l'interface est basique mais fonctionnelle (voir ici et )

    Mon soucis actuel vient d'un problème de syntaxe (je ne connais pas énormément les spécificités du Java), mes différents éléments sont nommés : choix1_1, choix1_2... choix1_4, choix2_1...choix4_4.

    Je peux donc les identifier grâce à un findViewById(R.id.choix1_1). Mon problème vient de l'identification de chaque choix. Est-il possible d'avoir une syntaxe du type findViewById(R.id.choix$i_$j) avec i et j deux variables int ?

    Merci d'avance

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Syntaxiquement: non, le Java ne permet pas ça.
    Le mieux dans ce cas de figure est d'utiliser les listes (avec l'implémentation ArrayList par exemple).

    En l'occurrence, il faudrait une liste de listes de choix et l'appel à findViewById ressemblerait à ça: findViewById(R.id.get(i).get(j))

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Effectivement, cela semble intéressant (j'étais parti sur un switch lourd et long à mettre en place, l'Arraylist est bien plus intéressante). Je vais mettre ça en place, et je vous donnerais des nouvelles ensuite.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Rebonjour !

    Je me permets de reposter une seconde fois. Donc j'ai abouti à une version correcte de mon application (à savoir 4 couleurs, 4 essais). C'est très simple pour le moment, mais ça fonctionne.

    Si vous voulez essayer, l'Apk est disponible ici. Je prends volontiers d'éventuels commentaires.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Bonjour !

    J'ai un petit soucis, en voulant changer la version du Sdk nécessaire à mon projet, la compilation ne se lance plus, et je n'ai plus la classe R. Une idée de comment faire re-fonctionner mon projet ?

    Merci.

  6. #6
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 602
    Points : 18 517
    Points
    18 517
    Par défaut
    Il faut que tu donnes les messages d'erreurs que tu as eu.

    Comment à tu changer de sdk exactement ?
    Et pourquoi ?
    Keith Flint 1969 - 2019

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Je l'avais fait via les propriétés du projet dans Eclipse. Mais après avoir modifier à plusieurs reprises le Sdk, Eclipse s'est décidé à relancer la génération du fichier R.java.

    Tout est rentré dans l'ordre.

    Par contre, est-il possible de placer un ScrollView à un certain niveau par le code ? Pour être précis, j'ai un ScrollView qui contient différents éléments qui s'affichent au fur et à mesure (invisible => visible), est-il possible de dire au programme de placer la vue du ScrollView sur une certaine zone de son contenu ? Et de même, est il possible d'empêcher un ScrollView de scroller ? (et de le réactiver par la suite)

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    J'ai résolu tout mes problèmes, et j'en ai profité pour publier mon projet sur Android, j'aimerais cependant savoir si il existe un site où l'on peut récupérer des boutons personnalisés.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Bonjour à tous !

    Je me permets de revenir car j'ai de-nouveau besoin d'un peu d'aide. J'ai rajouté un mode challenge à mon jeu Mastermind (consiste à trouver un maximum de combinaison en 3 minutes). Une fois arrivée au bout du temps, la personne entre un pseudo, et le score est envoyé dans une table locale (gérée par Sqlite).

    Je souhaiterais faire de même, avec un Highscore online, donc utilisant un serveur Mysql et une page php pour faire le relais. Y aurait-il des tutoriaux expliquant comment gérer l'insertion, puis dans un 2ème temps, la lecture des informations d'une base distante ?

    Merci.

  10. #10
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Points : 1 499
    Points
    1 499
    Par défaut
    Bonsoir,

    Le moyen le plus simple est de créer sur ton serveur 2 webservices, l'un pour l'insertion, l'autre pour la consultation, et qui seront appelés par votre application.

    Un tuto là dessus : Appel de webservices depuis Android avec KSoap.

    Bonne continuation.
    Ingénieur Développement Mobile (Android / Windows Phone / Blackberry10)

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    J'ai avancé, mais je vous avouerai que je bloque.

    J'ai donc un fichier Php fonctionnel pour l'insertion des données, utilisant 3 variables :

    -nb permet de choisir la bonne table.
    -name permet d'envoyer le pseudo.
    -score permet d'envoyer le score.

    Ces variables sont récupérés en $_REQUEST par le fichier. Et quand je passe par le navigateur "...insert.php?nb=22&score=1&name=Yolt", ça inscrit bien le résultat dans la table indiquée.

    En recoupant plusieurs sources, je suis arrivé au code suivant :

    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
       		   int nb=case_couleur()*10+case_essai();
       		   List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(3);
     
       		   nameValuePairs.add(new BasicNameValuePair("nb", Integer.toString(nb)));
       		   nameValuePairs.add(new BasicNameValuePair("name", score.getPseudo()));
       		   nameValuePairs.add(new BasicNameValuePair("score", Integer.toString(score.getScore())));
     
       		   try{
       				HttpClient httpclient = new DefaultHttpClient();
       				HttpPost httppost = new HttpPost("http://****************.free.fr/insert.php");
       				httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
       				httpclient.execute(httppost);
     
       		   }catch(Exception e){
       			Log.e("log_tag", "Error in http connection "+e.toString());
       		   }
    Mais après plusieurs essais, je n'obtiens aucun résultat. (La BDD n'est pas modifié). Le téléphone ayant pourtant accès à internet (une pub s'affichant correctement sur la page de garde).

  12. #12
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Pour utiliser internet dans une application il faut ajouter une permission dans le fichier AndroidManifest.xml
    en l'ocurrence pour ton cas c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uses-permission android:name="android.permission.INTERNET" />

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Il l'est déjà :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="games.mastermind"
          android:versionCode="11"
          android:versionName="1.2">
        <uses-sdk android:minSdkVersion="4" />
     
        <uses-permission android:name="android.permission.VIBRATE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     
        <application android:icon="@drawable/icon" android:label="@string/app_name"
        				android:theme="@style/CustomButton">
            <activity android:name=".Main"
                      android:label="@string/app_name"
                      android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    		<activity android:name="com.google.ads.AdActivity"
               android:configChanges="keyboard|keyboardHidden|orientation"/>
     
        </application>    
    </manifest>

  14. #14
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Je vois pas de grosse abhération
    Essaye de rajouter une ligne a partir du moment ou la page insert.php est appelé, comme ça, tu s'aura déja si c'est les parametres qui passe pas ou l'appel qui foire.
    Apres tu peux récupérer le resultat de de ta requete dans un HttpResponse, avec un coup de debuger tu pourras si elle contient une erreur et surtout quelle erreur (parce qu'en théorie si t'avais un probleme de connexion l'exception dev rait etre levé)

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    J'ai refouillé un peu mon code, et le problème venait d'une condition qui ne se réalisait jamais. Cependant, quand le programme s'exécute, ce dernier "bloque" (je suppose que c'est censé correspondre à la tentative de connexion), puis se débloque.

    J'ai bien une trace de la connexion au script php (j'ai une entrée témoin ajouté dans une base de test), mais je n'ai pas d'entrée dans ma table de résultat.
    Aurais-je mal compris le principe de la requête effectuée ? Les variables envoyées par la list ne sont ils pas interprétés comme des $_REQUEST ?

    Aussi, est-il possible de faire continuer le programme, ou à défaut, d'afficher une fenêtre d'attente pendant l'enregistrement des données ?

  16. #16
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Moi je n'utilise jamais $_REQUEST parce que je sait tout le temps quel est la method, Ici t'es en $_POST donc ce que tu peux tenter c'est au début de ton script d'enregistrer le tableau $_POST direct dans ta BD (tu le sérialize par exemple) pour voir si tes variables si tu a bien t'es variables.

    Apres si elles y sont pas tu sera sur que le probleme vient du coté de l'application et donc de la methode d'envoi de requete

  17. #17
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Bon comme apparement ça marche en http GET method par le browser tu peu toujours tenter d'envoyer la requete en GET. Vus que tu veux envoyer des informations c'est mieux d'utiliser POST mais la ça permetra de determiner un peu mieux d'ou viens le problème

    C'est le meme code que t'as donné donc remplace le juste. Je pense pas avoir fait d'erreur je l'ai pas testé

    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
     
            int nb=case_couleur()*10+case_essai();
            try {
            HttpClient client = new DefaultHttpClient();
     
            //creation de l'url
            String urlString = "http://****************.free.fr/insert.php";
     
            //ajout des 3 parametres (ils sont fixe pas besion d'instancier des objets)
     
            urlString += "?nb="+Integer.toString(nb);
            urlString += "&name="+score.getPseudo();
            urlString += "&score="+Integer.toString(score.getScore());
     
     
            HttpGet get = new HttpGet(urlString);
            HttpResponse responseGet = client.execute(get);  
            HttpEntity resEntityGet = responseGet.getEntity();  
            if (resEntityGet != null) {
                        //do something with the response
                        Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet));
                    }
    } catch (Exception e) {
        e.printStackTrace();
    }
    Si ça crash au niveau du serveur c'est possible que les variables est besoin d'etre entouré d'apostrophes (je m'en rappel plus mais faut checker ça)

  18. #18
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Points : 68
    Points
    68
    Par défaut
    Alors, j'ai ajouté un print_r($_POST) qui s'inscrit dans la base de donnée. Effectivement, $_POST est vide (Array()). Quand je passe par ta solution en $_GET par contre, là ça fonctionne parfaitement (a l'exception près que l'application plante une fois la requête envoyée), et la valeur est bien insérée dans la base.

  19. #19
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Bah ça te fait t'a solution de secours mais je te conseille quand meme de passer par du POST, généralement GET c'est pour récupérer des infos et les variables servent de paramètres (date, id ou autres) mais pas pour envoyer des données a traitées.

    Au moins t'es sur maintenant que c'est dans ton bout de code.

    Tu pourrais tenter de debuguer au niveau de cette ligne dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    httpclient.execute(httppost);
    Et regarder ce que contient httppost, particulièrement si il contient bien t'es variables

  20. #20
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    J'ai un peu modifié, si tu pouvais le tester et me dire

    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
     int nb=case_couleur()*10+case_essai();
            try {
            HttpClient client = new DefaultHttpClient();
     
            //creation de l'url
            String urlString = "http://****************.free.fr/insert.php";
     
            HttpPost post = new HttpPost(urlString);
     
            //ajout des 3 données
            List<NameValuePair> data = new ArrayList<NameValuePair>();
     
            data.add(new BasicNameValuePair("nb", Integer.toString(nb)));
       	data.add(new BasicNameValuePair("name", score.getPseudo()));
       	data.add(new BasicNameValuePair("score", Integer.toString(score.getScore())));
     
            //force l'encodage en UTF8 (on sait jamais, au moins t'es sur)
            UrlEncodedFormEntity dataEncoded= new UrlEncodedFormEntity(data,HTTP.UTF_8);
     
            //insert le data dans la requete
            post.setEntity(ent);
     
            //on execute la requete construite précédement
            HttpResponse responsePOST = client.execute(post);
            //recupère la reponse
            HttpEntity resEntity = responsePOST.getEntity();  
                if (resEntity != null) {
                    //log l resultat si il y en a un
                    Log.i("RESPONSE",EntityUtils.toString(resEntity));
                }
    } catch (Exception e) {
        e.printStackTrace();
    }

Discussions similaires

  1. Projet Application groupware/gestion de projets: quelle(s) techno(s) ?
    Par n1n0x dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 18/01/2008, 10h46
  2. Réponses: 5
    Dernier message: 15/12/2007, 22h55
  3. Créer un projet "application window"
    Par alexis67 dans le forum Visual C++
    Réponses: 1
    Dernier message: 07/03/2007, 08h27

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