的HTTPService的AsyncToken和AsyncResponder例子 [英] HTTPService AsyncToken and AsyncResponder example

查看:553
本文介绍了的HTTPService的AsyncToken和AsyncResponder例子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在哪里可以找到它实现由标记的AsyncToken和AsyncResponder异步调用中的HTTPService Flex应用程序的例子吗?
在此先感谢

HTTPService在发送一个字符串像这样带有一定频率:

行号列#号#行号列#号#行号列#号#....

EDITED code:

 <?XML版本=1.0编码=UTF-8&GT?;
< MX:应用creationComplete =onCreationComplete()
的xmlns:MX =htt​​p://www.adobe.com/2006/mxml布局=绝对>
< MX:脚本>
<![CDATA [
    进口mx.rpc.remoting.RemoteObject;
    进口mx.rpc.events.ResultEvent;
    进口mx.rpc.events.FaultEvent;
    进口mx.rpc.http.mxml.HTTPService;
    进口mx.rpc.AsyncRequest;
    进口mx.rpc.AsyncResponder;
    进口mx.rpc.AsyncToken;
    进口mx.collections.ArrayCollection;
    进口mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
    进口mx.controls.AdvancedDataGrid;
    进口mx.controls.Alert;
    的mx.rpc.IResponder进口;
    [绑定]
    公共变种DataList控件:ArrayCollection的;    公共职能getResults(来源:字符串):ArrayCollection的{
    VAR AC:ArrayCollection的=新ArrayCollection的();
    VAR数据:数组= source.split('#');
    对于(VAR我:= 0; I< data.length; I + = 3){
    变种dataObj:对象= {行:数据[I],柱:数据第[i + 1],值:数据第[i + 2]};
    ac.addItem(dataObj)
    }    返回交流;
    }
    公共职能的结果(事件:的ResultEvent):无效{
    DataList控件= getResults(字符串(event.result));
    }
    公共职能故障(事件:的FaultEvent):无效{
    DataList控件= getResults(字符串(event.fault));
    }公共职能onCreationComplete():无效
{
VAR服务:的HTTPService =新的HTTPService();
service.url =htt​​p://10.15.20.75/server4flex/servlet/Datagen;
service.resultFormat =文本;
VAR令牌:=的AsyncToken service.send(DataList控件);
token.addResponder(新mx.rpc.Responder(结果,故障));
}]]>
< / MX:脚本>
< MX:的AdvancedDataGrid ID =DG
的dataProvider ={}结果
liveScrolling =真
    X =10Y =10宽度=621
    verticalScrollPolicy =上
 >
        < MX:列>
                    < MX:的AdvancedDataGridColumn的dataField =行
           HEADERTEXT =里加/>
                    < MX:的AdvancedDataGridColumn的dataField =栏
           HEADERTEXT =科隆纳/>
                    < MX:的AdvancedDataGridColumn的dataField =值
           HEADERTEXT =Valore/>
        < / MX:列>
 < / MX:&的AdvancedDataGrid G​​T; < / MX:用途>


解决方案

我不知道你真正寻找之后,但这里这里例如,有办法使用的AsyncToken AsyncResponder

编辑:


  1. 的DataList 必须可绑定

  2. 请不要设置的DataList 在每次循环迭代

  3. 您有给你打电话功能 getResults 在某些时候,当你的结果准备就绪

  4. 事件结果函数是一个事件,但也有的ResultEvent 那里有一个结果包含数据字段

这可能看起来这(未经测试):

  [绑定]
公共变种DataList控件:ArrayCollection的;公共职能getResults(来源:字符串):ArrayCollection的{
    VAR AC:ArrayCollection的=新ArrayCollection的();
    VAR数据:数组= source.split('#');
    对于(VAR我:= 0; I< data.length; I + = 3){
     ac.addItem({行:数据[I],柱:数据第[i + 1],值:数据第[i + 2]});
    }
    返回交流;
}私有函数的结果(事件:的ResultEvent):无效{
 DataList控件= getResults(字符串(event.result));
}

EDIT2

这是用一个简单的PHP文件,以获得本地Web服务器上运行的数据的工作示例。


  

Flex的一部分


 <?XML版本=1.0编码=UTF-8&GT?;
< MX:应用creationComplete =onCreationComplete()
            的xmlns:MX =htt​​p://www.adobe.com/2006/mxml布局=绝对>
< MX:脚本>
<![CDATA [
  进口mx.collections.ArrayCollection;
  进口mx.rpc.AsyncToken;
  进口mx.rpc.Responder;
  进口mx.rpc.events.FaultEvent;
  进口mx.rpc.events.ResultEvent;
  进口mx.rpc.http.mxml.HTTPService;    [绑定]
    公共变种DataList控件:ArrayCollection的;    公共职能getResults(来源:字符串):ArrayCollection的{
        VAR AC:ArrayCollection的=新ArrayCollection的();
        VAR数据:数组= source.split('#');
        对于(VAR我:= 0; I< data.length; I + = 3){
            变种dataObj:对象= {行:数据[I],柱:数据第[i + 1],值:数据第[i + 2]};
            ac.addItem(dataObj)
        }        返回交流;
    }    公共职能的结果(事件:的ResultEvent):无效{
        DataList控件= getResults(字符串(event.result));
    }    公共职能故障(事件:的FaultEvent):无效{
        //在这里做任何你要管理你收到的错误
    }    公共职能onCreationComplete():无效
    {
        VAR服务:的HTTPService =新的HTTPService();
        service.url =htt​​p://127.0.0.1/getDatas.php;
        service.resultFormat =文本;
        VAR令牌:=的AsyncToken service.send();
        token.addResponder(新mx.rpc.Responder(结果,故障));
    }]]>
< / MX:脚本>
< MX:的AdvancedDataGrid ID =DG
                     的dataProvider ={} DataList控件
                     liveScrolling =真
                     X =10Y =10宽度=621
                     verticalScrollPolicy =上
        >
    < MX:列>
        < MX:的AdvancedDataGridColumn的dataField =行
                                   HEADERTEXT =里加/>
        < MX:的AdvancedDataGridColumn的dataField =栏
                                   HEADERTEXT =科隆纳/>
        < MX:的AdvancedDataGridColumn的dataField =值
                                   HEADERTEXT =Valore/>
    < / MX:列>
< / MX:&的AdvancedDataGrid G​​T;< / MX:用途>


  

PHP的一部分(getDatas.php)


 <?PHP打印1#C1#V1#2#C2#V2#,3#C3#V3>

Where can I find an example of Flex application which implements an HTTPService asynchronously called by an AsyncToken and an AsyncResponder? Thanks in advance

the httpservice send a string like this with a certain frequency:

row#column#number#row#column#number#row#column#number#....

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

解决方案

I dont know what you are really looking after but here or here for example, are way to use AsyncToken and AsyncResponder

Edit:

  1. your dataList have to be Bindable
  2. Don't set dataList on each loop iteration
  3. You have to call you function getResults at some point when your results are ready
  4. event in result function is an Event but also a ResultEvent where there is a result field containing your data

Which may look as this (untested):

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

this is a working example using a simple php file to get the data running on a local web server.

Flex part

<?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 part (getDatas.php)

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

这篇关于的HTTPService的AsyncToken和AsyncResponder例子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆