我目前正在使用 Adobe Flex 4.6 开发移动应用程序,但在使用 HTTP 服务功能时遇到问题。我正在尝试使用如下所示的 HTTP 请求:
http://api.somesite.co.uk/api/v1/data?api_key=00000aaaaa111111&area=伦敦
我已经使用数据菜单导入了服务并使用需要的参数对其进行了测试,当我对服务运行测试时,它会很好地拉回数据并将其显示在“测试操作”视图中。
但是,当我将以下代码添加到我的视图中以测试应用程序时,它会返回 2032 错误:
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:myservice="services.myservice.*"
initialize="view1_initializeHandler(event)" title="list">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import spark.events.IndexChangeEvent;
protected function view1_initializeHandler(event:FlexEvent):void
{
// TODO Auto-generated method stub
var api_key:String = "00000aaaaa111111"
var area:String = "London";
listResult.addEventListener(ResultEvent.RESULT, onResult);
listResult.addEventListener(FaultEvent.FAULT, httpFault);
listResult.token = service.list(api_key, area);
trace(listResult.token);
}
public function httpFault(event:FaultEvent):void {
var faultstring:String = event.fault.faultDetail;
trace("The Fault is: " + faultstring);
}
protected function onResult (event:ResultEvent):void
{
}
protected function list_changeHandler(event:IndexChangeEvent):void
{
}
protected function list_creationCompleteHandler(event:FlexEvent):void
{
}
]]>
</fx:Script>
<fx:Declarations>
<s:CallResponder id="listResult" result="data=listResult.lastResult"/>
<myservice:MyService id="service"/>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:List id="list" left="0" right="0" top="0" bottom="85" fontSize="20" contentBackgroundColor="#272727"
creationComplete="list_creationCompleteHandler(event)" change="list_changeHandler(event)">
<s:AsyncListView list="{data}"/>
<s:itemRenderer>
<fx:Component>
<s:IconItemRenderer
labelFunction="Name"
iconFunction="getImageURL"
iconHeight="80"
iconWidth="80">
<fx:Script>
<![CDATA[
import valueObjects.Item;
private function Name(item: Object):String
{
var item:Item = Item(item);
return listing.name;
}
private function getImageURL(item: Object):String
{
var item:Item = Item(item);
return listing.image_url;
}
]]>
</fx:Script>
</s:IconItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
</s:View>
使用上面的代码,我已经设法跟踪问题,即由于某些未知的愚蠢原因,当从视图运行代码时,发送的 url 是错误的,并且下划线被替换为 %5F,如下所示:
http://api.somesite.co.uk/api/v1/data?area=London&api%5Fkey=00000aaaaa111111
谁能帮我解决这个问题?
谢谢
编辑……
你好,
如果 URL 错误,我希望它在“测试操作”视图中运行它时会失败,但是它会返回预期的数据并且一切看起来都很好。只有当我尝试将它应用于我遇到问题的视图时,它才会替换传递的 api_key 的下划线。我正在使用的服务是 Zoopla 服务,网址如下:
http://developer.zoopla.com/docs/Property_listings
如果你可以看看这个并告诉我,我正在传递 3 个参数:
- api_key
- 列表状态
- 区域
从调试数据中我可以看到下划线得到了更改,我已经采用了这个更改的 url 并尝试在另一个程序中运行它并且它失败了,但是当我只是将api%5Fkey
部分更改为 api_key 并在另一个程序中再次运行它返回数据。所以我相信 api_key 下划线是问题所在,我不知道如何解决这个问题,或者为什么它在视图上不起作用但在测试视图中起作用?有任何想法吗?
编辑 2 ...
我最近将代码更新为:
protected function list_creationCompleteHandler(event:FlexEvent):void
{
var params:Object = new Object();
params.api_key = "MY_API_KEY";
params.area = "London";
params.listing_status = "rent";
params.page_size = 100;
srv.send(params);
}
<fx:Declarations>
<s:HTTPService id="srv" url="http://api.zoopla.co.uk/api/v1/property_listings?"
method="GET"
result="srv_resultHandler(event)"
fault="srv_faultHandler(event)" useProxy="false"/>
</fx:Declarations>
当我使用上面的代码时,我在下面得到了这个错误,看起来代码正在以某种方式更改 URL 并创建一个新的混乱的:-S
故障是:
Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://localhost:37813/api/v1/property_listings?&page%5Fsize=100&api%5Fkey=MY_API_KEY&area=London&listing%5Fstatus=rent?hostport=api.zoopla.co.uk&https=N&id=F91A1C6D-8E19-9F50-EAEF-05DA5601D98D" errorID=2032]. URL: http://api.zoopla.co.uk/api/v1/property_listings?