flex和后台交互数据最重要是通过异构传输的httpserivce的xml结构。而高效率合理的异步传输数据是flex的开发中的核心。我就公开一下自己面向接口的httpservice的写法。希望有人可以指正。
首先第一个接口是决定通过获取xml的接口:
package com.sunshine.framework.serviceif{ public interface UrlResultXml { function getResultXml(xmlUrl:String=null,urlResult:UrlResult=null,postValue:Object=null):void; }}
主要的传入参数有url地址,xml的处理接口和post的参数;
get的httpservice的实现类是:
ackage com.sunshine.framework.service{ import com.sunshine.framework.serviceif.UrlResultXml; import com.sunshine.framework.serviceif.UrlResult; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class GetUrlResultXml extends BaseUrlResult implements UrlResultXml { private var xmlService:HTTPService; private var parameterXML:XML; //处理接口 private var _urlResult:UrlResult; public function GetUrlResultXml() { super(); } public function getResultXml(xmlUrl:String=null, urlResult:UrlResult=null, postValue:Object=null):void { this._urlResult=urlResult; xmlService=new HTTPService(); xmlService.method="GET"; xmlService.useProxy=false; xmlService.resultFormat=HTTPService.RESULT_FORMAT_XML; xmlService.addEventListener("result", httpResult); xmlService.url=xmlUrl; xmlService.send(); } public function httpResult(event:ResultEvent):void { parameterXML=XML(event.result); this._urlResult.handleXml(parameterXML); } }}
post的httpservice的接口:
package com.sunshine.framework.service{ import com.sunshine.framework.serviceif.UrlResultXml; import com.sunshine.framework.serviceif.UrlResult; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class PostUrlResultXml extends BaseUrlResult implements UrlResultXml { private var xmlService:HTTPService; private var parameterXML:XML; private var _postValue:Object; public function PostUrlResultXml() { super(); } public function getResultXml(xmlUrl:String=null, urlResult:UrlResult=null, postValue:Object=null):void { this._urlResult=urlResult; xmlService=new HTTPService(); xmlService.method="post"; xmlService.useProxy=false; xmlService.resultFormat=HTTPService.RESULT_FORMAT_XML; xmlService.addEventListener("result", httpResult); xmlService.url=xmlUrl; xmlService.send(postValue); } public function httpResult(event:ResultEvent):void { parameterXML=XML(event.result); this._urlResult.handleXml(parameterXML); } public function set PostValue(value:Object):void { this._postValue=value; } public function get PostValue():Object { return _postValue; } }}
http的xml处理接口:
package com.sunshine.framework.serviceif{ public interface UrlResult { function handleXml(resultXml:XML):void; }}
简单的处理接口的实现例子:
package com.sunshine.framework.service{ import com.sunshine.framework.serviceif.UrlResult; import mx.controls.Alert; public class ConfigUrlResult implements UrlResult { public function ConfigUrlResult() { } public function handleXml(resultXml:XML):void { Alert.show(resultXml.toXmlString()); } }}
这么写的话也可以增加类的重用性,减少编码。其实以上方法不是很成熟的,有更好的办法可以交流哦
在新的项目中,我发现上面2个方法的局限,我修改了一一下写了2个新的类,可以提高开发效率:
package com.shine.framework.httpService{ import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class BaseGetHttpService { private var xmlService:HTTPService; private var method:Function; public function BaseGetHttpService() { } public function getResultXml(xmlUrl:String, method:Function):void { this.method=method; xmlService=new HTTPService(); xmlService.method="GET"; xmlService.useProxy=false; xmlService.resultFormat=HTTPService.RESULT_FORMAT_XML; xmlService.addEventListener("result", httpResult); xmlService.url=xmlUrl; xmlService.send(); } private function httpResult(event:ResultEvent):void { resultXml(XML(event.result)); } protected function resultXml(value:XML):void { method.call(this, value); } }}
package com.shine.framework.httpService{ import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class BasePostHttpService { private var xmlService:HTTPService; private var method:Function; public function BasePostHttpService() { } public function getResultXml(xmlUrl:String, method:Function, postValue:Object=null):void { this.method=method; xmlService=new HTTPService(); xmlService.method="post"; xmlService.useProxy=false; xmlService.resultFormat=HTTPService.RESULT_FORMAT_XML; xmlService.addEventListener("result", httpResult); xmlService.url=xmlUrl; xmlService.send(postValue); } private function httpResult(event:ResultEvent):void { resultXml(XML(event.result)); } protected function resultXml(value:XML):void { method.call(this, value); } }}