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 :

Alimenter une string[]


Sujet :

Android

  1. #1
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut Alimenter une string[]
    Bonjour,

    Je vous demanderais un peu de complaisance car je débute sous Android :-)
    Ce que je vais demander va paraitre stupide pour certains mais là je suis énervé car je n'ai plus que cela qui bloque...

    Pour faire simple, je récupère des données provenant d'une base Sqlite que je voudrais afficher dans une listview, mais comme dans ces listview il y a des images qui sont sur le net, je dois me debrouiller pour faire du téléchargement asynchrone.

    J'ai testé diverse méthode, tutoriaux et autres pages de blog, et j'ai enfin réussi a trouver un truc qui marche et assez simple.

    J'ai donc incorporé l'exemple dans mon projet et cela fonctionne avec les données de l'exemple qui sont sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private String[] mStrings={
                "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png",
                "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
                "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
                "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
                "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
                "http://a3.twimg.com/profile_images/511790713/AG.png",
                "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
                "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png"
        };
    Mais je n'arrive pas a construire un tableau (mais est ce un tableau ?) avec mes données...

    J'ai donc fais une fonction pour charger les données :
    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
     
       public void loadData() {
     
        	DatabaseHelper dbCon = new DatabaseHelper(this);
        	ArrayList<HashMap<String, String>> map = dbCon.getSeries();
        	int totalItem = map.size();
     
        	Booking2[] strImg = new Booking2[map.size()];
     
        	for (int i = 0; i <= totalItem; i++) {
        		strImg[i] = new Booking2(map.get(i).get("img").toString());
        	}
     
        }
     
     
        class Booking2 {
            String name;
            public Booking2(String name) {
                this.name = name;
            }
        }
    La boucle se fait bien, mais impossible de construire un truc qui ressemble à String[] mStrings.

    Est ce que quelqu'un voudrait bien m'aider s'il vous plait ?

    Un grand merci d'avance parce que cela fais deux jours que je suis sur cette histoire de téléchargement asynchrone...

    @+
    Cadou

  2. #2
    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
    Par défaut
    Bonsoir,

    Le plus simple serait peut être de modifier la fonction de la classe DatabaseHelper pour qu'elle retourne directement un String[], car une ArrayList de Hashmap, c'est quand même assez sale niveau mémoire...

    Sinon en ce qui concerne la boucle elle même, je pense qu'il y a déjà une erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int totalItem = map.size();
    Ici la variable totalItem va prendre le nombre de hashmap dans la liste, et non le nombre d'items dans les hashmaps.
    Il va sans doute falloir améliorer un peu l'algorithme.

    Bonne continuation.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Pourquoi ne pas utiliser un arraylist comme tu le fait juste avant

    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
     public void loadData() {
            
        	DatabaseHelper dbCon = new DatabaseHelper(this);
        	ArrayList<HashMap<String, String>> map = dbCon.getSeries();
        	int totalItem = map.size();
     
        	//Booking2[] strImg = new Booking2[map.size()];
            ArrayList<Booking2> strImg = new ArrayList<Booking2>(totalItem);
    
        	for (int i = 0; i <= totalItem; i++) {
                    
        		//strImg[i] = new Booking2(map.get(i).get("img").toString());
                    strImg.add(new Booking2(map.get(i).get("img").toString());
        	}
     
        }
     
     
        class Booking2 {
            String name;
            public Booking2(String name) {
                this.name = name;
            }
        }

  4. #4
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Je vous remercie pour les réponses.

    @Viish => Non y a pas de problème, cela me renvoi ce que je veux..
    J'ai 104 items et chacun a 5 colonnes dont une colonne contenant l'url de l'image.

    @JediMaster => Je n'utilise pas de arraylist ou autre chose car j'ai déja essayé pas mal de truc dont un passage de ArrayList<HashMap<String, String>> via mon adapter, mais là j'ai cru comprendre que je ne peux passer que des trucs en string[].

    Je suis vraiment noob en programmation Android, pour le moment je fais des copier coller et je colle mes variables dedans. Je cherche juste a ce que dans un premier temps cela fonctionne.

    Donc comment fait t-on pour remplir un string[] dans une boucle tel que montré plus haut dans mon code ?

    Merci d'avance
    Cadoudal56

  5. #5
    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
    Par défaut
    Le problème c'est que le code de ta boucle est bon.
    Peux tu faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < strImg.length; i++)
    {
    Log.d("String " + i, strImg[i]);
    }
    que l'on voit ce qu'il y a dans ton tableau, des fois que l'erreur ne vienne pas de là ?

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Ok admetons que tu veux pas utiliser de arraylists ce qui est quand meme la meilleur solution pour stocké des objects dans un tableau ^^

    Je pense que tu fais une erreur quand tu dis ça
    Citation Envoyé par cadoudal56 Voir le message
    Donc comment fait t-on pour remplir un string[] dans une boucle tel que montré plus haut dans mon code ?
    Comme te l'as fait remarquer Viish a aucun moment tu veux un tableau de String[], toi tu veux (d'apres ton code) un tableau de Booking2.
    Aussi pour passer d'un arraylist a un tableau tu fais

    et si ton monArrayLit était un ArrayList<String> alors tu obtiens un String[]

  7. #7
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Re,

    @JediMaster => Non tu as pris le probleme a l'envers... Moi je veux obtenir ceci en sortant de ma boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private String[] mStrings={
                "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png",
                "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png",
                "http://a3.twimg.com/profile_images/121630227/Droid_normal.jpg",
                "http://a1.twimg.com/profile_images/957149154/twitterhalf_normal.jpg",
                "http://a1.twimg.com/profile_images/97470808/icon_normal.png",
                "http://a3.twimg.com/profile_images/511790713/AG.png",
                "http://a3.twimg.com/profile_images/956404323/androinica-avatar_normal.png",
                "http://a1.twimg.com/profile_images/909231146/Android_Biz_Man_normal.png"
        };
    En clair comment je peux remplir mStrings dynamiquement comme par exemple dans une boucle tel que je le montre. Pour l'optimisation je verrais après.
    Et a la question pourquoi je veux absolument ce format là (parce que quelqu'un va la poser c'est sur), parce que pour le moment si je passe mStrings tel quel l'application fonctionne, mais dès que j'essaie de mettre mes données à la place, cela ne fonctionne plus...
    Donc je veux passer mes données dans le même format pour que cela fonctionne. Je verrais après pour optimiser le tout

    Viish => Cela me donne pour ce que tu me demandes, une belle erreur (eclipse refuse). Donc j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Log.i("LOGLOG", "Attention"+strImg[i].toString());
    Listeseries2$booking2@44ec6ad8

    Et pendant que j'y étais, j'ai fais le meme sur mStrings :
    LJava.lang.string:@44e75b78


    Personne n'a une idée de comment on remplit dynamiquement une string[] ?

    Merci d'avance
    Cadou

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Ok, je comprends ce que tu veux mais je ne comprend pas pourquoi Booking2 existe (Je pensais que tu nous donnais qu'une partie) parce que c'est juste un string en fait.

    Voila le code pour créer ton String[] au lieu d'un Booking2[]

    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
    public void loadData() {
            
        	DatabaseHelper dbCon = new DatabaseHelper(this);
        	ArrayList<HashMap<String, String>> map = dbCon.getSeries();
        	int totalItem = map.size();
     
        	//Booking2[] strImg = new Booking2[map.size()];
            String[] strImg = new String[totalItem];
    
        	for (int i = 0; i <= totalItem; i++) {
                    
                    strImg[i] = new String(map.get(i).get("img").toString());
                    // ou strImg[i] = map.get(i).get("img").toString()
                    // je me rappel plus trop
        	}
     
        }
     
     
        class Booking2 {
            String name;
            public Booking2(String name) {
                this.name = name;
            }
        }
    PS: oublie pas que tu dois avoir tout le temps une hashmap avec pour clé "img" dans chaque HashMap.


    Listeseries2$booking2@44ec6ad8

    Et pendant que j'y étais, j'ai fais le meme sur mStrings :
    LJava.lang.string:@44e75b78
    ça c'est normal puisque strImg n'est pas une String mais un Objet Booking2 contenant une propriété string (name en l'ocurrence)
    Donc deux choix
    - soit tu override le ToString() de ta classe booking pour qu'elle affiche le name
    - soit au lieu de ToString tu crée le getteur getName() qui renvoit name

  9. #9
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Je crois que cela fonctionne, j'ai une autre erreur (le message n'est plus le meme), du genre javanullpointer... A voir si c'est une valeur vide, ou une iteration de trop dans la boucle...

    Merci beaucoup de ton aide...

    Un tutorial sur comment déclarer, stocker et récupérer ses variables sous Java/Android serait un vrai plus, et a ma connaissance n'a encore jamais été réalisé :-)

    Je vais tout de meme passer le sujet en résolu

    Merci beaucoup en tout cas

    @+
    Cadou

  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
    Par défaut
    Citation Envoyé par cadoudal56 Voir le message
    Un tutorial sur comment déclarer, stocker et récupérer ses variables sous Java/Android serait un vrai plus, et a ma connaissance n'a encore jamais été réalisé :-)
    Ça fonctionne exactement comme pour du Java normal.

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Le cas des String est un peu spécial mais en java tout comme en C# (a la difference du C ou du C++ sans Vector de la STL), quand t'on veut créer des tableaux d'objets dynamiques on utilise les Arraylist ou les Vector qui sont optimisés et qui permettent de ne pas réinventer la roue

    Je pense que dans les tutos que t'as pris sur le net le cas du tableau de String il devait etre codé en dur mais pour ton cas tu a besoin d'un tableau dynamique. La solution String marche mais tu aurais trés bien pus utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<String> strImg
    et afin d'obtenir ton String[] tu aurais fait
    Dans le code que tu as tu n'utilise plus Booking2 donc je ne sais pas si c'était important mais c'est bizarre de faire
    ArrayList<HashMap<String, String>> map = dbCon.getSeries();
    quand au final tu pourrais faire
    String[] map = dbCon.getSeries();


    En revanche si dans ton HashMap tu d'autre clé que "img" par exemple un "name"
    La HashMap
    ("img", "http://a3.twimg.com/profile_images/670625317/aam-logo-v3-twitter.png")
    ("img", "http://a3.twimg.com/profile_images/740897825/AndroidCast-350_normal.png")
    ("name", "lien de map")
    ("img", "http://a3.twimg.com/profile_images/511790713/AG.png")
    ou autre oublie pas que qu'il est compté dans le map.size(); par exemple ici cela renverra 4 au lieu mais tu ne veux que les 3 "img"

    Cependant ça ne te fais pas sortir du tableau mais juste que tu en déclare plus qu'il en faut

  12. #12
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Re,

    Ben pour etre sincere, et si vous avez jeté un oeuil à ma signature, ma spécialité, c'est plus le web et particulier le PHP + tout ce qui va avec (HTML, CSS, Javascript, MySQL).

    En PHP tu as deux choses, la variable simple qui contient une chaine et le tableau qui va de 1 a x dimension... C'est simple et avec cela tu peux faire tout ce dont tu as besoin...

    Le coup du booking, je l'ai mis parce que j'avais vu un tuto sur internet qui recoupait certains trucs, mais c'est pas pour autant que j'ai compris a quoi cela sert... Mais je comprends comment ca marche :-)

    Quand je vous dis que je fais des copier coller de codes et que je réajuste, je ne vous ment pas :-)
    J'ai bien un bouquin sur le java, mais bon faudrait déja que je remette la main dessus et voir si je ne devrais pas en acheter un autre. Reste a savoir si je dois prendre un truc sur Android/Java ou que sur Java...

    Merci beaucoup en tout cas, et je vais voir si je peux pas passer cela sous la forme que tu préconise.

    En gros, j'extrait les infos d'une base de données sqlite et par deformation phpienne, je les travaille/trimballe sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $data[0]["_id"] = "xxx";
    $data[0]["title"] = "xxx";
    $data[0]["img"] = "xxx";
    Ma hashmap ressemblerait plus à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    La HashMap
    ("monid", "montitre", "monresume", "macategory", "urldemonimage")
    ("monid2", "montitre2", "", "macategory2", "")
    ("monid3", "montitre3", "monresume3", "macategory3", "")
    ("monid4", "montitre4", "monresume4", "macategory4", "urldemonimage4")
    ("monid7", "montitre5", "", "macategory", "urldemonimage")
    J'en ai 104 lignes sur 5 colonnes avec certaines colonnes qui peuvent etre vides. A ce que j'ai cru comprendre java n'aime pas trop les variables vides alors que le php est beaucoup plus permissif (et moins subtil peut-etre).

    J'ai vu que des gars essayait de sortir le php sur android. Pour le moment cela fonctionne, mais le probleme se situe sur le packaging de l'appli. Dommage sinon je me serait orienté la dessus, mais dès que ce sera censé fonctionner, il y a des chances que je m'y mettes :-)

    @+
    Cadou

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

Discussions similaires

  1. [Débutant] Alimenter une liste de String à partir d'une CheckedListBox
    Par crazyman8 dans le forum C#
    Réponses: 3
    Dernier message: 15/02/2012, 10h53
  2. Alimenter une image byte[] à partir d'un String
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 18
    Dernier message: 31/10/2006, 07h54
  3. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30
  4. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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