2010-01-11 7 views
1

Где я могу найти пример приложения Flex, которое реализует HTTPService, асинхронно вызываемый AsyncToken и AsyncResponder? Заранее спасибоHTTPService AsyncToken и пример AsyncResponder

HTTPService отправить строку, как это с определенной частотой:

строки # столбец # номер # строка # столбец # номер # строка # столбец # номер # ....

РЕДАКТИРОВАНИЕ КОД:

<?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> 

ответ

6

Я не знаю, что вы действительно ищете после, но here или here к примеру, способ использования AsyncToken и AsyncResponder

Edit:

  1. ваш dataList должны быть Bindable
  2. Не устанавливайте dataList на каждой итерации цикла
  3. Вы должны позвонить вам функционировать getResults в какой-то момент, когда ваши результаты будут готовы
  4. event в result функция Event, а также ResultEvent whe повторно есть result поле, содержащее данные

Что может выглядеть следующим образом (непроверенные):

[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:

это рабочий пример, используя простой PHP файл получить данные, запущенные на локальном веб-сервере.

Flex часть

<?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> 

Php часть (getDatas.php)

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

Да, это то, о чем я говорю, но я искал пример приложения или источника – Franky

+0

Ну, я думаю, у вас есть все, что вам нужно, в приведенной выше ссылке. Что вы не понимаете ? – Patrick

+0

Я отредактировал вопрос ... datagrid ничего не возвращает, если я использую asyncToken и asyncResponder, и я не могу решить проблему. Мое приложение работает только в том случае, если строка имеет ограниченную длину, но мне нужно что-то, кто извлекает данные из бесконечной строки. – 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); 
} 

Найдено here.

+0

Я отредактировал свой вопрос, пожалуйста, помогите, спасибо заранее – Franky