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

ActionScript 3 Discussion :

ma fonction retourne toujours null


Sujet :

ActionScript 3

  1. #1
    Membre du Club Avatar de haco28
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut ma fonction retourne toujours null
    Bonjour à tous,
    je suis débutant dans le développement en ActionScript 3 et j'ai un petit problème.

    Voila j'ai un fichier XML param.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="utf-8"?>
    <properties>
    	<item name="bgcolor" value="0xFF0000" />
    	<item name="title" value="EARTH COM" />
    </properties>
    j'ai une classe as3 qui traite le xml et me retourne via des methodes le titre et le bgcolor contenu dans le param.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
     
    package com.haco.xmlLoad { 
     
    	import flash.net.URLLoader;
    	import flash.net.URLLoaderDataFormat;
    	import flash.net.URLRequest;
    	import flash.events.Event;
    	import flash.events.HTTPStatusEvent;
    	import flash.events.IOErrorEvent;
     
    	public class Param {
     
    		public var XMLDOC:XML;
    		public var _title:String;
    		public var _bgColor:String;
     
    		public function Param(){
    		}
     
    		public function init(xmlFile:String):void{
    			var loader:URLLoader = new URLLoader();
    			loader.addEventListener(Event.COMPLETE, loadXML); 
    			loader.addEventListener(IOErrorEvent.IO_ERROR, ioerror);
    			loader.load(new URLRequest(xmlFile)); 
    			XML.ignoreWhitespace = true;
    		}
     
    		private function loadXML(pEvt:Event):void{
    			var xml:XML = new XML(pEvt.target.data);
    			this.XMLDOC = xml;
    			_title = "";
    			_bgColor = "";
    			for(var i:String in this.XMLDOC..item) {
    				trace(this.XMLDOC.item[i].@name);
    				if(this.XMLDOC.item[i].@name == "title"){
    					setTitle(this.XMLDOC.item[i].@value);
    				}else if(this.XMLDOC.item[i].@name == "bgcolor"){
    					setBgColor(this.XMLDOC.item[i].@value);
    				}
    			}
    		}
     
    		private function ioerror(pEvt:IOErrorEvent){
    			trace("Erreur lors du chargement du fichier XML");
    			trace(pEvt.text);
    		}
     
    		public function getTitle():String{
    			return _title;
    		}
    		public function setTitle(atitle:String):void{
    			_title = atitle;
    		}
     
    		public  function getBgColor():String{
    			return _bgColor;
    		}
    		public function setBgColor(aBgColor:String):void{
    			_bgColor = aBgColor;
    		}	
    	}
    }
    et dans mon fichier flash index.fla j'importe ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.haco.xmlLoad.Param;
    et je cré un objet Param:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /**load parameters**/
    var parameters:Param = new Param();
    j'appelle ma méthode init pour le traitement du fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parameters.init("param.xml");
    et je trace le titre récupéré dans le fichier XML via la méthode getTitle() de ma classe Param :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    trace(" title => " + parameters.getTitle());
    /**End of load parameters**/
    Le problème est que ma fonction me retourne toujours null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    title => null
    Contenu flash généré en 1 ms
    Pourquoi je trace toujours null ?

  2. #2
    Membre du Club Avatar de haco28
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Voila j'ai réussi en utilisant le dispatchEvent
    Je sais pas si c'est très correct comme code, d'ailleurs pour ceux qui sont intéressé, voilà comment j'ai fais :

    Ma classe Param.as extends de EventDispatcher
    j'ajoute une variable constante Param.CHARGEMENT_TERMINE
    et j'ajoute à la fin de mon listener loadXML un dispatch event dispatchEvent(new Event(Param.CHARGEMENT_TERMINE ));

    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
     
    package com.haco.xmlLoad { 
     
    	import flash.net.URLLoader;
    	import flash.net.URLLoaderDataFormat;
    	import flash.net.URLRequest;
    	import flash.events.Event;
    	import flash.events.HTTPStatusEvent;
    	import flash.events.IOErrorEvent;
    	import flash.events.ProgressEvent;
    	import flash.events.EventDispatcher;
     
    	public class Param extends EventDispatcher{
     
    		public var XMLDOC:XML;
    		public var _title:String = "";
    		public var _bgColor:String = "";
    		private var loader:URLLoader = new URLLoader();
    		public static const CHARGEMENT_TERMINE:String = "chargementTermine";
     
    		public function Param(xmlFile:String){
    			loader.addEventListener(Event.COMPLETE, loadXML); 
    			loader.addEventListener(ProgressEvent.PROGRESS, avancement);
    			loader.addEventListener(IOErrorEvent.IO_ERROR, ioerror);
    			loader.load(new URLRequest(xmlFile)); 
    			XML.ignoreWhitespace = true;
    		}
     
    		// définition de la fonction exécutée par l'événement PROGRESS :
    		// déclenchée à chaque avancement du chargement )
    		private function avancement( event:Event) {
    			trace(event.target.bytesLoaded+" Ko chargés sur "+event.target.bytesTotal + " Ko");
    		}
     
     
    		private function loadXML(pEvt:Event):void{
    			trace ( "Phase : " + pEvt );
    			var xml:XML = new XML(pEvt.target.data);
    			this.XMLDOC = xml;
    			for(var i:String in this.XMLDOC..item) {
    				if(this.XMLDOC.item[i].@name == "title"){
    					setTitle(this.XMLDOC.item[i].@value);
    				}else if(this.XMLDOC.item[i].@name == "bgcolor"){
    					setBgColor(this.XMLDOC.item[i].@value);
    				}
    			}
    			dispatchEvent(new Event(Param.CHARGEMENT_TERMINE ));
    		}
     
    		private function ioerror(pEvt:IOErrorEvent){
    			trace("Erreur lors du chargement du fichier XML");
    			trace(pEvt.text);
    		}
     
    		public function getTitle():String{
    			return this._title;
    		}
    		public function setTitle(atitle:String):void{
    			this._title = atitle;
    		}
     
    		public function getBgColor():String{
    			return this._bgColor;
    		}
    		public function setBgColor(aBgColor:String):void{
    			this._bgColor = aBgColor;
    		}
    	}
    }
    ensuite sur ma scène je cré mon Objet Param
    et j'ajoute un eventListener qui va prendre en argument ma variable constante CHARGEMENT_TERMINE de ma classe Param
    et va executer la methode traceResult:
    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
     
    import com.haco.xmlLoad.Param;
    stop();
     
    /**load parameters**/
    var parameters:Param = new Param("param.xml");
     
    parameters.addEventListener ( Param.CHARGEMENT_TERMINE, traceResult );
     
    // fonction écouteur
    function traceResult ( pEvt:Event ):void{
    	trace("chargement terminé !");
    	trace("title => " + parameters.getTitle());
    	trace("bgColor => " + parameters.getBgColor());
    }
    /**End of load parameters**/
     
    gotoAndStop(2);
    du coup je récupère bien les valeurs de mon fichier XML
    ma fonction traceResult me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Contenu flash généré en 2 ms
    152 Ko chargés sur 152 Ko
    Phase : [Event type="complete" bubbles=false cancelable=false eventPhase=2]
    chargement terminé !
    title => EARTH COM
    bgColor => 0xFF0000
    Voila

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/02/2012, 08h48
  2. Réponses: 2
    Dernier message: 30/06/2011, 19h58
  3. [PB9] En exécutable, ImportFile retourne toujours NULL
    Par a_zoubir dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 20/12/2008, 19h02
  4. fonction retournant toujours 0.000 ?
    Par _SamSoft_ dans le forum C
    Réponses: 49
    Dernier message: 22/02/2007, 20h52
  5. Réponses: 2
    Dernier message: 30/03/2006, 16h18

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