我目前正在使用Adobe Flex 4.6开发移动应用程序,我遇到了使用HTTP服务功能的问题。我正在尝试使用如下所示的HTTP请求:
http://api.somesite.co.uk/api/v1/data?api_key=00000aaaaa111111&area=London
我已使用数据菜单导入服务并使用参数需要对其进行测试,当我对服务运行测试时,它会将数据拉回并在“测试操作”视图中显示。
然而,当我然后在我的视图中添加以下代码来测试应用程序时,它返回一个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个参数:
从调试数据我可以看到下划线得到了更改,我已经使用了这个更改的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?
答案 0 :(得分:0)
参数的编码是一个“特征”。要防止它,请不要将params对象传递给send方法。而是手动构建请求字符串,如下所示:
var :myurl:String = "http://api.zoopla.co.uk/whatever?api_key=123&listing_status=45";
service.url = myurl;
service.send();