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. #21
    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 !

    J'ai essayé ton nouveau code, et le $_REQUEST est alors vide et le fichier renvoie une erreur sur mysql_num_rows(), ce qui est logique puisqu'il ne peut choisir la bonne table sans avoir le $_POST['nb'].

    Par contre, tu avais fait une erreur semblerait-il :

    post.setEntity(ent);
    au lieu de :
    post.setEntity(dataEncoded);

  2. #22
    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
    Citation Envoyé par Yolteotl Voir le message
    Par contre, tu avais fait une erreur semblerait-il :

    post.setEntity(ent);
    au lieu de :
    post.setEntity(dataEncoded);
    Oui effectivement

    Sinon dans le Logcat ya quoi a "RESPONSE" ?

    Créer juste un champs test dans ta BD et inscrit en dur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO 'Tatable' (test) VALUES (".htmlentities(print_r($_POST)).")");
    Vérifier que c'est vraiment vide

    Lancer en mode debug et vérifier le contenu de post a la ligne 24 (du code precedent mode POST), voir si post contient bien les variables en ajoutant un watcher dessus

  3. #23
    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, dans la BDD avec le print_r, j'obtiens le champ suivant :

    Et au niveau du RESPONSE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    04-29 12:33:32.114: INFO/RESPONSE(278):     <br />
    04-29 12:33:32.114: INFO/RESPONSE(278): <b>Warning</b>:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>/mnt/149/sdb/4/b/*************/insert.php</b> on line <b>19</b><br />
    Ce qui est normal, car la requête cherche une table qui n'existe pas (nb n'étant pas transmis, le programme va chercher une table highscore (au lieu de highscore00, 01,...)

    Question peut être idiote, mais est-il possible que ce soit le serveur free qui interdit les requêtes en $_POST externe ?

  4. #24
    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
    Question peut être idiote, mais est-il possible que ce soit le serveur free qui interdit les requêtes en $_POST externe ?
    La question est pas bete mais t'appel bien ton script donc ça marche mais les variable passent pas. Je pense que si tu regaderais la variable $_SERVER['REQUEST_METHOD'] elle devrais contenir 'POST' donc la method est bien accepté.

    En fait maintenant que t'utilise le Logcat t'as pas besoin d'enregistrer en BD, dans ton script fait juste un echo de ce que tu veux et tu le retrouvera dans le log, ça permet de voir que les données passent bien dans les deux sens.

    Comme je vois pas dutout là

    Le code est vraiment le meme sur Apache.org
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("param1", "value1"));
    formparams.add(new BasicNameValuePair("param2", "value2"));
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
    HttpPost httppost = new HttpPost("http://****************.free.fr/insert.phpo");
    httppost.setEntity(entity);
    C'est un peu bête mais bon parfois ça tien a rien
    t'as bien changé les NameValuePair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(3);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<NameValuePair> data = new ArrayList<NameValuePair>();
    pas besoin de limiter a 3 pour l'instant


    du coté serveur fait juste une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "POST=".$_POST."|GET=".$_GET."|REQUEST=".$_REQUEST."|SERVER=".$_SEVER;
    apres t'as plus qu'a copier la ligne de log dans wordpad (pour qu'il te supprime pas les lignes), ça aide pour débuguer

    Faudrais tenter d'afficher les données, dans le dernier code a la ligne 12

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(NameValuePair nameValuePair : data)
    {
         Log.d("nameValuePair : "+nameValuePair.getName(), nameValuePair.getValue());
    }
    Histoire de checker que tout est bon jusqu'a là

  5. #25
    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
    Citation Envoyé par JediMaster Voir le message
    C'est un peu bête mais bon parfois ça tien a rien
    t'as bien changé les NameValuePair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(3);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<NameValuePair> data = new ArrayList<NameValuePair>();
    pas besoin de limiter a 3 pour l'instant
    Ça, c'est bon, j'ai bien vérifié.


    du coté serveur fait juste une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "POST=".$_POST."|GET=".$_GET."|REQUEST=".$_REQUEST."|SERVER=".$_SEVER;
    apres t'as plus qu'a copier la ligne de log dans wordpad (pour qu'il te supprime pas les lignes), ça aide pour débuguer

    Faudrais tenter d'afficher les données, dans le dernier code a la ligne 12

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(NameValuePair nameValuePair : data)
    {
         Log.d("nameValuePair : "+nameValuePair.getName(), nameValuePair.getValue());
    }
    Histoire de checker que tout est bon jusqu'a là
    Alors là, j'ai mis dans le fichier PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	echo "POST=".$_POST."|GET=".$_GET."|REQUEST=".$_REQUEST."|SERVER=".$_SERVER."<br /><br />";
    	echo "".htmlentities(print_r($_POST, true))."<br /><br />";
    	echo "".htmlentities(print_r($_REQUEST, true))."<br /><br />";
    et j'ai bien rajouté la boucle à la ligne 12. J'obtiens donc dans le log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    04-29 14:27:49.074: DEBUG/nameValuePair : p(321): 0
    04-29 14:27:49.074: DEBUG/nameValuePair : s(321): 2
    04-29 14:27:49.074: DEBUG/nameValuePair : name(321): Trytrty
    04-29 14:27:49.085: DEBUG/nameValuePair : score(321): 7
    04-29 14:27:51.696: INFO/RESPONSE(321):     POST=Array|GET=Array|REQUEST=Array|SERVER=Array<br /><br />Array
    04-29 14:27:51.696: INFO/RESPONSE(321): (
    04-29 14:27:51.696: INFO/RESPONSE(321): )
    04-29 14:27:51.696: INFO/RESPONSE(321): <br /><br />Array
    04-29 14:27:51.696: INFO/RESPONSE(321): (
    04-29 14:27:51.696: INFO/RESPONSE(321): )
    04-29 14:27:51.696: INFO/RESPONSE(321): <br /><br /><br />
    04-29 14:27:51.696: INFO/RESPONSE(321): <b>Warning</b>:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>/mnt/149/sdb/4/b/warcraft3campagne/insert.php</b> on line <b>23</b><br />
    J'ai dû remplacer nb par 2 variables p et s, mais ça ne change rien au problème. Les $_POST et $_REQUEST sont vides, alors que le data est bien rempli avec les valeurs. C'est donc au niveau de l'envoi que ça semble poser problème...

    Au pire, je peux garder la solution du $_GET même si c'est moins bien. Il faut encore que je m'occupe de la récupération des données (bon, là j'ai un script qui semble fonctionner assez bien)

  6. #26
    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 !

    Alors, ne réussissant pas à faire passer la requête en $_POST, je me suis cantonné à une requête $_GET. Maintenant, il s'agit de récupérer les scores enregistrés dans la base distante.

    J'ai donc trouvé le script suivant qui correspond à ce que je veux faire :

    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
    private void getServerData() {
     
        	   InputStream is = null;
     
        	   String result = "";
     
        	    //http post
        	    try{
        	            HttpClient httpclient = new DefaultHttpClient();
        	            HttpPost httppost = new HttpPost("http://*****************.fr/connexion.php?p=" + case_couleur() + "&s=" + case_essai());
        	            HttpResponse response = httpclient.execute(httppost);
        	            HttpEntity entity = response.getEntity();
        	            is = entity.getContent();
     
        	    }catch(Exception e){
        	            Log.e("log_tag", "Error in http connection "+e.toString());
        	    }
     
        	    //convert response to string
        	    try{
        	            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        	            StringBuilder sb = new StringBuilder();
        	            String line = null;
        	            while ((line = reader.readLine()) != null) {
        	                    sb.append(line + "\n");
        	            }
        	            is.close();
        	            result=sb.toString();
        	    }catch(Exception e){
        	            Log.e("log_tag", "Error converting result "+e.toString());
        	    }
        	    //parse json data
        	    try{
        	            JSONArray jArray = new JSONArray(result);
        	            for(int i=0;i<jArray.length();i++){
        	                    JSONObject json_data = jArray.getJSONObject(i);
        	                    Log.i("log_tag","id: "+json_data.getInt("id")+
        	                            ", name: "+json_data.getString("name")+
        	                            ", score: "+json_data.getInt("score")+
        	                            ", date: "+json_data.getString("date")
        	                    );
        	                    //Get an output to the screen
        	                    result += "\n\t" + jArray.getJSONObject(i);
        	            }
        	    }catch(JSONException e){
        	            Log.e("log_tag", "Error parsing data "+e.toString());
        	    }
        	}
    Ne connaissant pas très bien le processus JSON, j'aimerais savoir si il était possible de passer le résultat de ce script dans une liste quelconque pour pouvoir le mettre en forme ensuite dans un TableLayout.

    Edit :
    Le fichier php lui est le 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
    17
    18
    	<?php
     
     
    	require_once 'JSON.php';
     
    	$service = new Services_JSON(); 
     
    	mysql_connect("*****","***********","*********");
    	mysql_select_db("*************");
     
    	$q=mysql_query("SELECT * FROM highscore".$_REQUEST['p']."".$_REQUEST['s']."");
    	while($e=mysql_fetch_assoc($q))
            $output[]=$e;
     
    		print($service->encode($output));
     
    	mysql_close();
        ?>

  7. #27
    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
    Peronelement je crérais une Classe Highscore avec un constructeur tout simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Class Highscore{
    private int id;
    private String name;
    private int score;
    private Date date;
     
    public Highscore(int _id, String _name, int _score, Date _date)
    this.id = _id;
    ...........
    }
    et dans ta boucle au moment ou tu Log tu ajoute dans un arraylist l'objet.
    Ton arraylist contiendra tout tes highscore apres je ne sais pas comment tu les affichent mais utiliser une listview avec un simple adapter serais la meilleur solution.
    ici il y a un exemple avec des gridviews (tu peux le remplacer par un tablelayout) dans une listview

  8. #28
    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
    C'est parfait, le score est bien uploadé, et est bien récupéré au moment de l'affichage des highscores.
    Il faut que je test un peu sur la durée, mais tout cela semble bon.
    Il ne me reste plus qu'à attendre le design d'un ami pour que l'appli soit terminée.
    Merci encore !

    Edit : J'aurais une dernière question, que se passera-t'il si le serveur n'est pas disponible ? Cela entrainera-t'il un plantage de l'application ? Est-il possible de l'éviter ? (via les catch peut être ?)

  9. #29
    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
    Tu pourrais utiliser une progressdialog pour que l'utilisateur sache que tu te connecte et que l'app est en mode travail.
    Si tu n'as pas de reponse du server il devrais renvoyer une erreur 404 par exemple, ce sera dans la HTTP response donc a partir de la t'agis en conséquence. Par exemple fermer la progressdialog et afficher une dialog qui dit que le serveur n'et pas dispo pour le moment avec juste un ok.
    Met quand meme un try catch mais dans certains cas le serveur peux repondre une erreur ou ton wifi peux tomber en rade au millieu, il y aura une reponse mais sera pas la bonne donc pas tes données et au moment ou tu va essayer de les parser/traitées, bah la, ca va crasher

  10. #30
    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 effectué plusieurs essais. Et effectivement, l'application crash quand la connexion n'est pas opérationnelle. Mon code étant le 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
    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
        private void connexion_BDD_online() {
     
        		InputStream is = null;
        		StringBuilder sb=null;
        		String result=null;
     
        	    //http post
        	    try{
        	    		HttpClient httpclient = new DefaultHttpClient();
        	            HttpPost httppost = new HttpPost("http://warcraft3campagne.free.fr/connexion.php?p=" + case_couleur() + "&s=" + case_essai());
        	            HttpResponse response = httpclient.execute(httppost);
        	            HttpEntity entity = response.getEntity();
        	            is = entity.getContent();
        	            Log.i("log_tag","a");
        	    }catch(Exception e){
        	            Log.e("log_tag", "Error in http connection "+e.toString());
        	    }
     
        	    //convert response to string
        	    try{
        	        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        	         sb = new StringBuilder();
        	         sb.append(reader.readLine() + "\n");
        	         String line="0";
        	         while ((line = reader.readLine()) != null) {
        	                        sb.append(line + "\n");
        	          }
        	          is.close();
        	          result=sb.toString();
        	          }catch(Exception e){
        	                Log.e("log_tag", "Error converting result "+e.toString());
        	          }
        	    //parse json data
        	          Log.i("log_tag","b");
        	    ListView lv= (ListView)findViewById(R.id.listview);
                List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
                String[] from = new String[] {"rowid", "Pseudo", "Score", "Date"};
                int[] to = new int[] {R.id.item1, R.id.item2, R.id.item3, R.id.item4};
     
        	    try{
        	          JSONArray jArray = new JSONArray(result);
        	          JSONObject json_data=null;
        	          for(int i=0;i<jArray.length();i++){
        	                 json_data = jArray.getJSONObject(i);
     
        	                 HashMap<String, String> map = new HashMap<String, String>();
        	    	        	map.put("rowid", Integer.toString(i+1) + ".");
        	    	        	map.put("Pseudo", json_data.getString("name"));
        	    	        	map.put("Score", Integer.toString(json_data.getInt("score")));
        	    	        	map.put("Date", json_data.getString("date"));
        	    	        	fillMaps.add(map);
        	             }
        	           SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.grid_item, from, to);
        	           lv.setAdapter(adapter);
        	           Log.i("log_tag","c");
        	          }
        	          catch(JSONException e1){
        	        	  Log.e("log_tag", "Error1 "+e1.toString());
        	          } catch (ParseException e1) {
        	        	  Log.e("log_tag", "Error2 "+e1.toString());
        	    	}
        	}
    L'erreur arrive entre le log_tag b et c, ce qui laisse supposer qu'effectivement, cela vient d'une erreur de parsage. Est-il possible d'empêcher le crash ? (en analysant éventuellement le contenu retourné avant le parsage ?)

    Pour ce qui de la Progressbar, il faut utiliser un Asynctask, c'est ça ?

  11. #31
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JSONArray jArray = new JSONArray(result);
        	          JSONObject json_data=null;
        	          for(int i=0;i<jArray.length();i++){
        	                 json_data = jArray.getJSONObject(i);
    T'as pas une Null exception ici ?

    J'aurais instancié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject json_data=new JSONObject ();
    a la place de le mettre a null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject json_data=null;
    Sinon je pense que c'est trop direct tu devrais tester si le mapping exist avant d'extraire la valeur, parce que les exceptions c'est sympas mais si tu peux gérer par toi meme c'est mieux.
    Donc en gros tu sais que pour que ton JSON soit valide pour toi il te faut
    un rowid
    un Pseudo
    un Score
    une Date

    Je pense que ce qui faut faire c'est utiliser isNull parce que d'apres la doc il sera plus efficace que has (car il teste en plus la nulité)
    Returns true if this object has no mapping for name or if it has a mapping whose value is NULL.
    a moins que tu considere que t'accepte une variable null alors utilise has()

    tu peux faire une fonction qui prend un Json et qui teste si il est valide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    bool isValid(JSONObject jsonObject)
    {
    if(jsonObject.iNull("rowid"))
     return false;
    if(jsonObject.iNull("Pseudo"))
     return false;
    if(jsonObject.iNull("Score"))
     return false;
    if(jsonObject.iNull("Date"))
     return false;
    return true;
    }
    et donc apres dans ton 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
    	    try{
        	          JSONArray jArray = new JSONArray(result);
        	          JSONObject json_data=null;
        	          for(int i=0;i<jArray.length();i++){
        	                 json_data = jArray.getJSONObject(i);
        	                 
        	                 if(json_data)
        	                 {
        	                 HashMap<String, String> map = new HashMap<String, String>();
        	    	        	map.put("rowid", Integer.toString(i+1) + ".");
        	    	        	map.put("Pseudo", json_data.getString("name"));
        	    	        	map.put("Score", Integer.toString(json_data.getInt("score")));
        	    	        	map.put("Date", json_data.getString("date"));
        	    	        	fillMaps.add(map);
        	                 }
        	             }
    C'est une solution t'en a d'autre a toi de choisir ce qui te convient le mieux
    Dans ce cas tu affiche les resultat bon mais pas les invalides (Si pour une raison ou pour une autre ca ce produit). Si ta rien dans ton fichier alors rien ne sera affiché. Dans ce cas tu ne detail pas les erreurs non plus et personne ne s'aura que le json est corrompus, a toi de voir ce que tu souhaite faire.

    Sinon si ta liste est vide t'as une propriété empty (je croi me rappeler) qui permet d'afficher quelque chose d'aternatif par exemple une texview pour indiquer l'erreur ou que la listview est vide a la place de mettre rien

  12. #32
    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 repris ta solution qui me semblait bonne, j'y ai rajouté une condition permettant de savoir si le réseau est disponible ou non, ce qui évitera aussi une partie des problèmes.

  13. #33
    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
    Ok cool, tu pourra mettre des screencshot du jeu et des menus a la fin, je suis un peu curieux de voir ce que ca donne
    Pour la partie jeu t'as utiliser une surfaceview ? juste une view avec canvas ? ou autre, j'imagine que c'et pas en OGL (ce serait un peu too much)

    Tu fais une IA ?

  14. #34
    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
    Pour le moment, j'utilise juste un ensemble de linear layout / table layout, qui apparaissent au fur et à mesure. Mais je pense que je vais refondre un peu l'interface pour obtenir quelque chose de plus dynamique. (au moins utiliser la listView comme pour le tableau des scores)
    J'attends de voir aussi ce que me réserve le graphiste, les maquettes étant très sympathiques. (voir pièce jointe)

    Pour l'IA, il s'agit essentiellement d'un random convertir en Integer (chaque entier correspondant à une couleur), et d'une fonction qui vérifie si le choix du joueur est bon ou bon mais au mauvais endroit.

    Il me reste à ajouter la ProgressBar pendant les chargements, et ce sera fini.
    Images attachées Images attachées   

  15. #35
    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
    Ah ok je vois,
    Il est bon ton graphiste ! ça va bien rendre ducoup

    sinon pour ta progress dialog c'est bien d'utiliser un thread ce qui permet d'éviter un blockage du programme si un probleme arrive

    ici tu as un exemple
    Tu peux aussi ajouter d'autres conditions de fermeture ( dialog.dismiss(); )

  16. #36
    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 réussi assez simplement en utilisant un AsynTask :

    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
        private class At extends AsyncTask<String, Void, Void>
        {
        	final ProgressDialog dialog = ProgressDialog.show(Main.this, "", getString(R.string.patientez), true);
     
    		@Override
    		protected Void doInBackground(String... params) {
    			connexion_BDD_online();
    			return null;
    		}
     
    		protected void onPostExecute(Void unused) {
     	        lv.setAdapter(adapter);
     	       if (this.dialog.isShowing()) this.dialog.dismiss();
    		}
     
        }
    Que j'appelle tout bêtement avec :

    C'est vraiment bien.

  17. #37
    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 !

    Je reviens avec 2 petites questions suite à la mise en place de la nouvelle interface :

    -Est-il possible d'appliquer (via un thème peut être ?) une police d'écriture personnalisée dans une application. J'ai vu ici et là des tuto permettant de le faire via Java, mais je préfèrerais autant que ce soit inscrit en Xml directement (pour ne pas avoir à alourdir le code inutilement).

    -Je dispose d'un PNG pour un bouton :



    J'y ai appliqué le 9-patch pour qu'il ne se déforme pas :



    Le problème est que, quand j'essaie d'utiliser ce bouton pour une taille faible, j'obtiens un résultat... problématique :



    L'écriture se retrouve donc coupée, ce qui n'est pas du tout agréable. Y-a t'ilune solution à ce problème ? Peut être ai-je mal patché le Png ?

    Merci d'avance !

  18. #38
    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 encore une question ! (Décidément)

    J'utilisais jusque là une interface totalement statique pour le jeu. (Comprendre que les différents objets des résultats sont déjà présent au chargement du fichier xml)

    Je souhaite faire cela plus proprement, j'ai donc mon code principale (game.xml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     	<ScrollView android:id="@+id/ScrollView"
    	android:layout_height="290dp" 
    	android:layout_width="fill_parent"
    	android:fillViewport="true">
     
     
        	<LinearLayout android:id="@+id/list_result"
        		android:orientation="vertical"
        		android:layout_width="fill_parent"
        		android:layout_height="wrap_content">
          	</LinearLayout>
     
        </ScrollView>
    Je souhaite ajouter le résultat dans le layout list_result. Pour cela, j'ai donc créé un fichier grid_result.xml :

    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
    <?xml version="1.0" encoding="utf-8"?>
             <LinearLayout android:id="@+id/essai"
         		android:orientation="horizontal"
          		android:layout_width="fill_parent"
          		android:layout_height="60dp"
          		android:gravity="top|center">
     
         	 	<TextView android:id="@+id/id_text"
            		android:textStyle="bold" 
            		android:textColor="#000000"
            		android:textSize="45dp"
            		android:layout_height="fill_parent" 
            		android:layout_width="wrap_content"
            		android:gravity="top"/>
     
          		<ImageView android:id="@+id/choix_1"
                            android:layout_width="50dp"
            		android:layout_height="50dp"
            		android:scaleType="fitXY"/>
     
              	<View  android:layout_width="7dp"
          			android:layout_height="fill_parent"/>
     
          		<ImageView android:id="@+id/choix_2"
                            android:layout_width="50dp"
            		android:layout_height="50dp"
            		android:scaleType="fitXY"/>
     
              	<View  android:layout_width="7dp"
          			android:layout_height="fill_parent"/>
     
          		<ImageView android:id="@+id/choix_3"
                            android:layout_width="50dp"
            		android:layout_height="50dp"
            		android:scaleType="fitXY"/>
     
              	<View  android:layout_width="7dp"
          			android:layout_height="fill_parent"/>
     
          		<ImageView android:id="@+id/choix_4"
                            android:layout_width="50dp"
            		android:layout_height="50dp"
            		android:scaleType="fitXY"/>
     
              	<View  android:layout_width="7dp"
          			android:layout_height="fill_parent"/>
     
          		<TableLayout android:layout_width="50dp"
        			android:layout_height="50dp"
        			android:stretchColumns="2">
     
     
        			<TableRow>
     
          				<ImageView android:id="@+id/bon_1"
          					android:layout_width="20dp"
          					android:layout_height="20dp"
          					android:scaleType="fitXY"/>
     
          				<View android:layout_width="10dp"
          					android:layout_height="20dp" />
     
          				<ImageView android:id="@+id/bon_2"
          					android:layout_width="20dp"
          					android:layout_height="20dp"
          					android:scaleType="fitXY"/>
          			</TableRow>
     
          			<View android:layout_height="10dp" />
     
     
        			<TableRow>
     
          				<ImageView android:id="@+id/bon_3"
          					android:layout_width="20dp"
          					android:layout_height="20dp"
          					android:scaleType="fitXY"/>
     
          				<View android:layout_width="10dp"
          					android:layout_height="20dp" />
     
          				<ImageView android:id="@+id/bon_4"
          					android:layout_width="20dp"
          					android:layout_height="20dp"
          					android:scaleType="fitXY"/>
          			</TableRow>
     
         		</TableLayout>
     
        	</LinearLayout>
    Donc voila, je souhaiterais mettre en mémoire le fichier grid_result.xml, modifier ses objets, et l'insérer dans le LinearLayout. En somme, utiliser une méthode similaire à celle utilisée pour la récupération des données highscores (qui ce font dans une ListView). Est-ce possible ?

    Merci !

  19. #39
    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 me permets de poster une dernière fois, pour vous indiquer que l'application est disponible avec son nouveau design. Merci à ceux qui m'ont aider à la réaliser.

    Et le lien.

  20. #40
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 552
    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 552
    Points : 18 446
    Points
    18 446
    Par défaut
    Je viens d'installer le Mastermind d'Yolteotl.
    Je vais tester ça aujourd'hui.

    Purée y'avait 8 couleurs dans le Mastermind.


    En gros ça ferait 8^4 combinaisons.
    4096 combinaisons possible et 10 essaies, ça semble impossible dit comme ça.
    Je devais être plus doué quand j'étais plus petit.

    On est beaucoup à avoir un score de 7.
    J'ai retrouvé les algorithmes du Mastermind.

    9ième avec 15.
    Keith Flint 1969 - 2019

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, 11h46
  2. Réponses: 5
    Dernier message: 15/12/2007, 23h55
  3. Créer un projet "application window"
    Par alexis67 dans le forum Visual C++
    Réponses: 1
    Dernier message: 07/03/2007, 09h27

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