2010-01-11 14 views
1

Où puis-je trouver un exemple d'application Flex qui implémente un service HTTPS appelé de manière asynchrone par un AsyncToken et un AsyncResponder? Merci à l'avanceExemple HTTPService AsyncToken et AsyncResponder

la HTTPService envoyer une chaîne comme celui-ci avec une certaine fréquence:

ligne # # colonne numéro # ligne # # colonne numéro # ligne # colonne # numéro # ....

ÉDITÉ CODE:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application creationComplete="onCreationComplete()" 
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script> 
<![CDATA[ 
    import mx.rpc.remoting.RemoteObject; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.events.FaultEvent; 
    import mx.rpc.http.mxml.HTTPService; 
    import mx.rpc.AsyncRequest; 
    import mx.rpc.AsyncResponder; 
    import mx.rpc.AsyncToken; 
    import mx.collections.ArrayCollection; 
    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn; 
    import mx.controls.AdvancedDataGrid; 
    import mx.controls.Alert; 
    import mx.rpc.IResponder; 


    [Bindable] 
    public var dataList:ArrayCollection; 

    public function getResults(source:String) : ArrayCollection { 
    var ac:ArrayCollection = new ArrayCollection(); 
    var data:Array = source.split('#'); 
    for (var i:int = 0; i < data.length; i += 3) { 
    var dataObj:Object = {row: data[i], column: data[i+1], value: data[i+2]};  
    ac.addItem(dataObj) 
    } 

    return ac; 
    } 
    public function result(event:ResultEvent):void{ 
    dataList = getResults(String(event.result)); 
    } 
    public function fault(event:FaultEvent) : void { 
    dataList = getResults(String(event.fault)); 
    } 

public function onCreationComplete():void 
{ 
var service:HTTPService = new HTTPService(); 
service.url = "http://10.15.20.75/server4flex/servlet/Datagen"; 
service.resultFormat = "text"; 
var token:AsyncToken = service.send(dataList); 
token.addResponder(new mx.rpc.Responder(result, fault)); 
} 

]]> 
</mx:Script> 
<mx:AdvancedDataGrid id="dg" 
dataProvider="{result}" 
liveScrolling="true" 
    x="10" y="10" width="621" 
    verticalScrollPolicy="on" 
> 
     <mx:columns> 
        <mx:AdvancedDataGridColumn dataField="row" 
      headerText="Riga"/> 
        <mx:AdvancedDataGridColumn dataField="column" 
      headerText="Colonna"/> 
        <mx:AdvancedDataGridColumn dataField="value" 
      headerText="Valore"/> 
     </mx:columns> 
</mx:AdvancedDataGrid> 

</mx:Application> 

Répondre

6

Je ne sais pas ce que vous cherchez vraiment après mais here ou here par exemple, sont façon d'utiliser AsyncToken et AsyncResponder

Edit:

  1. votre dataList doivent être Bindable
  2. Ne pas mettre dataList sur chaque itération de boucle
  3. Vous devez vous appeler la fonction getResults à un moment où vos résultats sont prêts
  4. event dans result fonction est un Event mais aussi un ResultEvent whe re il y a un champ result contenant vos données

Ce qui peut se présenter comme ceci (non testé):

[Bindable] 
public var dataList:ArrayCollection; 

public function getResults(source:String) : ArrayCollection { 
    var ac:ArrayCollection = new ArrayCollection(); 
    var data:Array = source.split('#'); 
    for (var i:int = 0; i < data.length; i += 3) { 
    ac.addItem({row: data[i], column: data[i+1], value: data[i+2]}); 
    } 
    return ac; 
} 

private function result(event:ResultEvent) : void { 
dataList = getResults(String(event.result)); 
} 

Edit2:

ceci est un exemple de travail en utilisant un simple fichier php obtenir les données en cours d'exécution sur un serveur Web local.

Flex partie

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application creationComplete="onCreationComplete()" 
      xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Script> 
<![CDATA[ 
    import mx.collections.ArrayCollection; 
    import mx.rpc.AsyncToken; 
    import mx.rpc.Responder; 
    import mx.rpc.events.FaultEvent; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.http.mxml.HTTPService; 

    [Bindable] 
    public var dataList : ArrayCollection; 

    public function getResults(source : String) : ArrayCollection { 
     var ac : ArrayCollection = new ArrayCollection(); 
     var data : Array = source.split('#'); 
     for (var i : int = 0; i < data.length; i += 3) { 
      var dataObj : Object = {row: data[i], column: data[i + 1], value: data[i + 2]}; 
      ac.addItem(dataObj) 
     } 

     return ac; 
    } 

    public function result(event : ResultEvent) : void { 
     dataList = getResults(String(event.result)); 
    } 

    public function fault(event : FaultEvent) : void { 
     //here do whatever you want to manage the error you received 
    } 

    public function onCreationComplete() : void 
    { 
     var service : HTTPService = new HTTPService(); 
     service.url = "http://127.0.0.1/getDatas.php"; 
     service.resultFormat = "text"; 
     var token : AsyncToken = service.send(); 
     token.addResponder(new mx.rpc.Responder(result, fault)); 
    } 

]]> 
</mx:Script> 
<mx:AdvancedDataGrid id="dg" 
        dataProvider="{dataList}" 
        liveScrolling="true" 
        x="10" y="10" width="621" 
        verticalScrollPolicy="on" 
     > 
    <mx:columns> 
     <mx:AdvancedDataGridColumn dataField="row" 
            headerText="Riga"/> 
     <mx:AdvancedDataGridColumn dataField="column" 
            headerText="Colonna"/> 
     <mx:AdvancedDataGridColumn dataField="value" 
            headerText="Valore"/> 
    </mx:columns> 
</mx:AdvancedDataGrid> 

</mx:Application> 

partie Php (getDatas.php)

<?php print "1#c1#v1#2#c2#v2#3#c3#v3"?> 
+0

oui c'est ce dont je parle, mais je cherchais un exemple d'application ou de source – Franky

+0

Eh bien, je pense que vous avez tout ce dont vous avez besoin dans le lien ci-dessus. Qu'est-ce que tu ne comprends pas ? – Patrick

+0

J'ai édité la question ... la grille de données ne retourne rien si j'utilise asyncToken et asyncResponder et je ne peux pas résoudre le problème. Mon application ne fonctionne que si la chaîne a une longueur limitée, mais j'ai besoin de quelque chose qui récupère des données d'une chaîne infinie. – Franky

4
private function onCreationComplete():void 
{ 
    var service:HTTPService = new HTTPService(); 
    service.url = "http://www.google.com"; 
    service.resultFormat = "text"; 
    var token:AsyncToken = service.send(); 
    token.addResponder(new mx.rpc.Responder(result, fault)); 
} 

private function result(event:Event):void 
{ 
    trace(1, event); 
} 

private function fault(event:Event):void 
{ 
    trace(2, event); 
} 

Trouvé here.

+0

J'ai édité ma question s'il vous plaît aider, merci d'avance – Franky