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 :

ContentHandler et Activité: transmission de données


Sujet :

Android

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 72
    Par défaut ContentHandler et Activité: transmission de données
    Bonjour tout le monde,

    Je travaille en ce moment sur une appli android et je suis bloqué
    Dans les tutos que j'ai pu lire sur les content handler android, il y a simplement des syso qui affichent les données (genre entrée de balise etc) sachant que j'utilise SAX comme parser. Le soucis c'est que moi je dois envoyer des données depuis mon content handler à mon activité.

    En gros je parse mon XML, et j'aimerais y compter le nombre de fois qu'une balise est appelé et mettre dans un tableau le texte qu'il y a entre les balises. Entre j'aimerais envoyer le tableau et le nombre à mon activité qui va s'occuper à créer un nombre équivalent de boutons en fonction du nombre reçu du content handler et va mettre comme nom de bouton, le text au bon endroit dans le tableau (lui aussi recu depuis le content handler).

    Voici mon contentHandler:

    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
    package mpam.base;
     
    import java.util.ArrayList;
     
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    public class GestionnaireContenuAffParcours extends DefaultHandler {
    	String eltName="";
    	static int nbParcours=0;
    	static String lib[]=null;
    	int numLib=0;
     
     
    	public void startElement(String namespaceURI, String localName,  String rawName, Attributes atts) throws SAXException {
    		eltName = localName;  
     
     
    	}
    	// Pour les noeuds textes
    	public void characters (char[] ch, int start, int length) {
    	    String text = new String (ch, start, length);
    	    if(eltName.equals("profil")){
    		  	   nbParcours++;
    		}
    	    if(eltName.equals("libelle")){
    	    	lib[numLib]=text;
    	    	numLib++;
    		}
    	}
     
    	public static int getNbParcours(){
    		return nbParcours;
    	}
     
     
    	/**
             * @return the lib
             */
    	public static String[] getLib() {
    		return lib;
    	}
     
     
    }
    Le soucis c'est que avec ce code: ça me fait un null pointer exception si j'essai d'afficher le texte du bouton, et si je ne veux même pas afficher ce texte, ça me met que un seul bouton alors qu'il m'en faudrait 4.

    Voici la boucle qui est censé afficher les boutons dans mon activité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Button[] b1 = null;
            b1 = new Button[nbParcours];
            for(int i=0;i<nbParcours;i++)
            {
     
            b1[i] = new Button(this);
            b1[i].setText(libButton[i]);
            test.addView(b1[i],params);
            }
    et dans mon constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbParcours=GestionnaireContenuAffParcours.getNbParcours();
    		libButton=GestionnaireContenuAffParcours.getLib();

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Bonjour
    En ce qui concerne SAX, je pense qu'il faudrait poser les questions dans une autre rubrique, car le SAX de java est comme le SAX d'Android.
    Par contre pour la nullPointerException, j'aimerai bien voir le contenu du log pour savoir ce qui la cause exactement.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 72
    Par défaut
    D'accord, je vais voir où je pourrais poster. Voici le log:


    12-25 15:50:51.242: W/System.err(311): java.lang.NullPointerException
    12-25 15:50:51.253: W/System.err(311): at mpam.base.GestionnaireContenuAffParcours.characters(GestionnaireContenuAffParcours.java:28)
    12-25 15:50:51.253: W/System.err(311): at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:166)
    12-25 15:50:51.253: W/System.err(311): at org.apache.harmony.xml.ExpatParser.append(Native Method)
    12-25 15:50:51.253: W/System.err(311): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:506)
    12-25 15:50:51.253: W/System.err(311): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467)
    12-25 15:50:51.253: W/System.err(311): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329)
    12-25 15:50:51.253: W/System.err(311): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286)
    12-25 15:50:51.253: W/System.err(311): at mpam.base.MenuActivity.getXML(MenuActivity.java:43)
    12-25 15:50:51.253: W/System.err(311): at mpam.base.MenuActivity.<init>(MenuActivity.java:26)
    12-25 15:50:51.253: W/System.err(311): at java.lang.Class.newInstanceImpl(Native Method)
    12-25 15:50:51.253: W/System.err(311): at java.lang.Class.newInstance(Class.java:1479)
    12-25 15:50:51.253: W/System.err(311): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    12-25 15:50:51.253: W/System.err(311): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
    12-25 15:50:51.253: W/System.err(311): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    12-25 15:50:51.253: W/System.err(311): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    12-25 15:50:51.253: W/System.err(311): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    12-25 15:50:51.253: W/System.err(311): at android.os.Handler.dispatchMessage(Handler.java:99)
    12-25 15:50:51.253: W/System.err(311): at android.os.Looper.loop(Looper.java:123)
    12-25 15:50:51.253: W/System.err(311): at android.app.ActivityThread.main(ActivityThread.java:4363)
    12-25 15:50:51.253: W/System.err(311): at java.lang.reflect.Method.invokeNative(Native Method)
    12-25 15:50:51.253: W/System.err(311): at java.lang.reflect.Method.invoke(Method.java:521)
    12-25 15:50:51.262: W/System.err(311): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    12-25 15:50:51.262: W/System.err(311): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    12-25 15:50:51.262: W/System.err(311): at dalvik.system.NativeStart.main(Native Method)
    12-25 15:50:51.272: D/AndroidRuntime(311): Shutting down VM
    12-25 15:50:51.272: W/dalvikvm(311): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    12-25 15:50:51.272: E/AndroidRuntime(311): Uncaught handler: thread main exiting due to uncaught exception
    12-25 15:50:51.272: E/AndroidRuntime(311): java.lang.RuntimeException: Unable to start activity ComponentInfo{mpam.base/mpam.base.MenuActivity}: java.lang.NullPointerException
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.os.Handler.dispatchMessage(Handler.java:99)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.os.Looper.loop(Looper.java:123)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.ActivityThread.main(ActivityThread.java:4363)
    12-25 15:50:51.272: E/AndroidRuntime(311): at java.lang.reflect.Method.invokeNative(Native Method)
    12-25 15:50:51.272: E/AndroidRuntime(311): at java.lang.reflect.Method.invoke(Method.java:521)
    12-25 15:50:51.272: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    12-25 15:50:51.272: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    12-25 15:50:51.272: E/AndroidRuntime(311): at dalvik.system.NativeStart.main(Native Method)
    12-25 15:50:51.272: E/AndroidRuntime(311): Caused by: java.lang.NullPointerException
    12-25 15:50:51.272: E/AndroidRuntime(311): at mpam.base.MenuActivity.onCreate(MenuActivity.java:81)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    12-25 15:50:51.272: E/AndroidRuntime(311): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    12-25 15:50:51.272: E/AndroidRuntime(311): ... 11 more
    12-25 15:50:51.282: I/dalvikvm(311): threadid=7: reacting to signal 3
    12-25 15:50:51.282: E/dalvikvm(311): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mpam.base.GestionnaireContenuAffParcours.characters(GestionnaireContenuAffParcours.java:28)
    Il faut donc regarder la ligne 28 du fichier GestionnaireContenuAffParcours.java qui utilise un objet non-déclaré (nullPointerException)
    Voir aussi ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mpam.base.MenuActivity.onCreate(MenuActivity.java:81)

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    D'apres le source que tu as posté... "lib" n'est jamais alloué (et donc à null)....

    lib[xx] va donc forcément créer un NPE.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 72
    Par défaut
    Ouai j'ai bien vu ^^ Le soucis c'est que c'est alloué dans le XML la ligne 28 etant: lib[numLib]=text; de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(eltName.equals("libelle")){
    	    	lib[numLib]=text;
    	    	numLib++;
    		}
    Donc soit mon parser est mal foutu ou alors la transmission du tableau des du nb est mal envoyé à mon activité, ce qui nous ramène à l'origine de ce post ^^ (J'ai également posté dans JAVA/XML au cas où)

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String lib[]=null;
    lib[numLib]=text;
    Ça ne peut pas marcher comme ça.
    Il faut créer le tableau de String avec une taille fixe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] lib = new String[taille];
    Mais, puisqu'il s'agit d'un parser SAX, tu ne peux pas connaitre le nombre de balises à l'avance et donc il vaudrai mieux d'utiliser une ArrayList<String> ou alors changer de fonctionnement, utiliser Dom ou JDom.

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Jojo____ Voir le message
    Ouai j'ai bien vu ^^ Le soucis c'est que c'est alloué dans le XML la ligne 28 etant: lib[numLib]=text;
    Ce code veut dire: "met à la case 'numLib' du tableau 'lib' la valeur 'text'"... mais à ce moment là, (et c'est *toujours* le cas vu ton code), lib est *null*.... et n'est donc pas un tableau avec au moins 'numLib+1' cases...

    Tu devrais utiliser des containers (bien plus pratiques que les tableaux) comme Vector<T>, ou ArrayList<T>...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Tu devrais utiliser des containers (bien plus pratiques que les tableaux) comme Vector<T>, ou ArrayList<T>...
    ArrayList<T> de préférence...
    Pourquoi ne faut-il pas employer la classe Vector ?

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 72
    Par défaut
    Effectivement, merci beaucoup. Avec un arraylist de string et une boucle foreach ca marche beaucoup mieux tout à coup ^^

    Par contre juste une petite question que je pose ici si jamais qqn saurais faire. Avec ce tableau assez grand, il faudrais que j'installe une scrollview, alors en xml ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            		android:layout_height="fill_parent"
            		android:layout_width="fill_parent"
            		android:background="@drawable/background2"
            	>
     
            		<TableLayout 
            	    	android:layout_width="fill_parent"
            	    	android:layout_height="wrap_content"
            	    	android:stretchColumns="1"
            	    >
    Mais vu que je la supprime dès le debut dans le xml (la view) pour en créer une directement dans l'activité, pour permettre l'affichage dynamique. Il faudrais que je retranscrive ceci en code dans l'activité :s Je vois pas trop comment faire

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Salut
    Dans ces cas là (nouvelle question), je te conseillerais d'ouvrir un nouveau sujet.
    Sinon, je n'ai pas bien compris, le plus simple est d'utiliser la vue de ton Layout xml, pourquoi la supprimer pour ensuite en recréer une ?
    Un affichage dynamique n'implique pas de recréer la vue, il faut respecter le MVC.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/06/2013, 23h37
  2. ContentHandler et Activité: transmission de données
    Par Jojo____ dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 25/12/2011, 17h54
  3. transmission de donnée
    Par Tempotpo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/04/2006, 18h09
  4. Transmission de donnés
    Par scaleo dans le forum Langage
    Réponses: 5
    Dernier message: 25/09/2005, 22h18
  5. Réponses: 2
    Dernier message: 13/05/2005, 16h20

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