Partage
  • Partager sur Facebook
  • Partager sur Twitter

Android Bundle

Passage de tableau de Int et Double

    5 février 2013 à 20:18:01

    Bonjour, ceci est mon premier poste sur le forum car j'ai un gros souci qui même après en gros une semaine de recherche  même sur le site de la doc d'Android je n'ai pas trouver de réponse...

    Mon problème est que j'ai deux activité, la première qui est une activité de chargement, envoie par Bundle les variable charger par elle même a ma seconde activité qui l'ai traite.

    Intent intent_Jouer = new Intent(chargement.this, Jouer.class);
    	
    	//debut de l'envoie par Bundle
    	intent_Jouer.putExtra("map", map);
    	intent_Jouer.putExtra("map_nom", map_nom);
    	intent_Jouer.putExtra("mois_clock", Mois_Clock);
    	intent_Jouer.putExtra("jour_clock", Jour_Clock);
    	intent_Jouer.putExtra("heure_clock", Heure_Clock);
    	intent_Jouer.putExtra("minute_clock", Minute_Clock);
    	intent_Jouer.putExtra("seconde_clock", Seconde_Clock);
    	intent_Jouer.putExtra("x", x);
    	intent_Jouer.putExtra("y", y);
    	intent_Jouer.putExtra("l", l);
    	intent_Jouer.putExtra("pseudo", pseudo);
    	intent_Jouer.putExtra("vitesse", vitesse);
    	intent_Jouer.putExtra("up", up);
    	
        
        startActivity(intent_Jouer);


    Le souci n'est pas la.. l'envoie ce fait trés bien.

    Après de très nombreux Force Close de mon app, j'ai isoler mon code qui bug et corriger en grande parti. mais il me reste toujours deux ligne que je n'arrive pas a corriger.

     map est un double[100][34]

    up est un int[200][9]

    Bundle entrer = this.getIntent().getExtras();
    map = entrer.get("map");  //cette ligne beug
    		map_nom = entrer.getStringArray("map_nom");
    		Mois_Clock = entrer.getString("mois_clock");
    		Jour_Clock = entrer.getString("jour_clock");
    		Heure_Clock = entrer.getString("heure_clock");
    		Minute_Clock = entrer.getString("minute_clock");
    		Seconde_Clock = entrer.getString("seconde_clock");
    		x = entrer.getInt("x");
    		y = entrer.getInt("y");
    		l = entrer.getInt("l");
    		pseudo = entrer.getString("pseudo");
    		vitesse = entrer.getInt("vitesse");
    		up = entrer.getIntegerArrayList("up");  //et celle la aussi


    Mon grand souci c'est que même sur la doc du Bundle, il n'y a pas comment passez des tableaux par Bundle.

    dois-je passez le tableau ligne par ligne avec une boucle?

    Merci d'avance pour votre aide.

    PS: excuser mes fautes d'orthographe j'ai de grosse difficultés dans ce domaine.

    -
    Edité par Willoss 5 février 2013 à 21:35:09

    • Partager sur Facebook
    • Partager sur Twitter
      6 février 2013 à 13:14:43

      Ben tu utilises simplement les méthodes putExtra(String, double[]) et putExtra(String, int[]) pour placer tes tableaux dans le Bundle, puis getDoubleArrayExtra(String) et getIntArrayExtra(String) pour les récupérer.

      Ou j'ai mal compris ton problème ?

      • Partager sur Facebook
      • Partager sur Twitter
      ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
        6 février 2013 à 16:10:50

        J'utilise bien cette méthode pour les envoyer, mais ce ne sont pas des tableau double[] mais des double[][] et pareil

        J'ai bien sure essayer de mettre getDoubleArray mais il return un Double[] et non un double[][] (pareil pour les Int)

        EDIT: tu a bien cerner mon probleme, mais le souci c'est que meme avec getDoubleArray("Key") et getIntArray("key"), l'application plante car met tableau sont bi-dimentionnelle.

        -
        Edité par Willoss 6 février 2013 à 16:35:33

        • Partager sur Facebook
        • Partager sur Twitter
          6 février 2013 à 18:54:00

          En fait c'est normal. Les tableaux sont des objets, donc comme il n'y a aucun méthode qui prendre explicitement en paramètre un tableau de double (et de int) bidimensionnel, la méthode utilisée est putExtra(String, Serializable). Du coup de l'autre côté pour récupérer tes tableaux il faut que tu utilises la méthode getSerializableExtra(String) puis tu castes le résultat.

          EDIT : Je n'avais pas vu que c'était des tableaux à 2 dimensions, d'où ma première réponse un peu à côté ^^

          -
          Edité par Flawyte 6 février 2013 à 18:54:51

          • Partager sur Facebook
          • Partager sur Twitter
          ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
            6 février 2013 à 19:05:55

            Minde a écrit:

            Je n'avais pas vu que c'était des tableaux à 2 dimensions, d'où ma première réponse un peu à côté ^^


            C'est pas grave^^

            et toujours un forceClose

            map = (Double[][]) entrer.getSerializable("map");


            Avec la ligne sa ForceClose et sans elle tourne comme si de rien été...

            • Partager sur Facebook
            • Partager sur Twitter
              6 février 2013 à 19:18:04

              Pourquoi tu ne récupères pas les valeurs directement depuis l'intent au lieu de passer par le Bundle ? Et castes le résultat en double[][] pas en Double[][], l'auto-boxing ne fonctionne pas pour les tableaux.

              • Partager sur Facebook
              • Partager sur Twitter
              ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                6 février 2013 à 19:24:01

                Directement depuis l'intent... c'est a dire?

                map = (double[][]) entrer.getSerializable("map");


                J'ai aussi changer dans la declaration Double[][] en double[][]

                mais sa ne passe toujours pas forceClose...

                • Partager sur Facebook
                • Partager sur Twitter
                  6 février 2013 à 19:30:30

                  Ben les méthodes que je te donne depuis tout à l'heure sont des méthodes à appeler sur l'intent, celui renvoyé par la méthode getIntent(). Logiquement ça ne devrait rien changer mais bon ton problème est un peu bizarre donc peut-être que la solution aussi ^^

                  • Partager sur Facebook
                  • Partager sur Twitter
                  ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                    6 février 2013 à 19:37:14

                    Force close aussi...

                    J'ai enlever le .getExtra dans la déclaration de mon entrer et je l'ai mit en Intent, après avoir changer les nom en Extra, toujours un ForceClose...

                    Je suis tout a fait d'accord avec toi, mon problème est bizarre... et très usant ^^

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 février 2013 à 20:06:02

                      Et sans essayer de récupérer les tableaux tu as aussi un force close ?

                      Sinon si tu testes sur ton phone qui est branché en USB tu devrais avoir un message d'erreur dans le Logcat où la console.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                        6 février 2013 à 21:00:38

                        sans esseyer de recup le tableau y a pas de forclose.

                        voici mon logcat (la parti qui bug)

                        02-06 20:59:40.242: E/AndroidRuntime(661): FATAL EXCEPTION: main

                        02-06 20:59:40.242: E/AndroidRuntime(661): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Team_Willoss.colonisation/com.Team_Willoss.colonisation.Jouer}: java.lang.ClassCastException: java.lang.Object[] cannot be cast to double[][]

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.ActivityThread.access$600(ActivityThread.java:127)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.os.Handler.dispatchMessage(Handler.java:99)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.os.Looper.loop(Looper.java:137)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.ActivityThread.main(ActivityThread.java:4441)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at java.lang.reflect.Method.invokeNative(Native Method)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at java.lang.reflect.Method.invoke(Method.java:511)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at dalvik.system.NativeStart.main(Native Method)

                        02-06 20:59:40.242: E/AndroidRuntime(661): Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to double[][]

                        02-06 20:59:40.242: E/AndroidRuntime(661):at com.Team_Willoss.colonisation.Jouer.onCreate(Jouer.java:70)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.Activity.performCreate(Activity.java:4465)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)

                        02-06 20:59:40.242: E/AndroidRuntime(661):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)

                        02-06 20:59:40.242: E/AndroidRuntime(661):... 11 more

                        EDIT: Jouer.java:70 c'est la ligne ou je recupere mon tableau map

                        -
                        Edité par Willoss 6 février 2013 à 21:04:08

                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 février 2013 à 20:46:37

                          Personne d'autre ne peut m'aider?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 février 2013 à 18:41:09

                            S'il vous plait, c'est assez important, personne ne sais comment passez un tableau bi-dimentionelle avec un Bundle?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 février 2013 à 10:15:56

                              Presque résolu, j'ai trouve comment les récupérer mais c'est un peut instable je suis quand même en attente d'une réponse qui utilisera les Bundle...

                              J'ai mit "map" et "up" en public static dans l'activité qui les envoie et dans l'activité qui les reçoi, j'ai mit

                              up = chargement.up;

                              map = chargement.map;

                              Sa marche mais sa me parait bien instable...

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Android Bundle

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown