无法理解Flex中的异常?

时间:2009-12-30 06:48:47

标签: flex flex3

我正在尝试在learn.adobe.com网站上提供的flickr代码,我得到了这个例外:

[RPC Fault faultString="Error #1090: XML parser failure: element is malformed." faultCode="Client.CouldNotDecode" faultDetail="null"]
    at mx.rpc.http::HTTPService/http://www.adobe.com/2006/flex/mx/internal::processResult()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\http\HTTPService.as:851]
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:188]
    at mx.rpc::Responder/result()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:43]
    at mx.rpc::AsyncRequest/acknowledge()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
    at DirectHTTPMessageResponder/completeHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:403]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/onComplete()

我无法理解这个例外。任何人都可以帮我这个吗? 这是我输入的代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
        backgroundGradientColors="[0xFFFFFF,0xAAAAAA]" horizontalAlign="left" 
        horizontalGap="15" verticalGap="15" width="459" height="371">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;

            [Bindable]
            public var photoBindable:ArrayCollection;
            private function requestPhotos():void{
                photoService.cancel();
                var params:Object=new Object();
                params.format = 'rss_200_enc';
                params.tags = searchTerm.text;
                photoService.send(params);
            }
            private function photoHandler(event:ResultEvent):void{
                photoBindable=event.result.rss.channel.items as ArrayCollection;
            }
        ]]>
    </mx:Script>
    <mx:HTTPService id="photoService"
        url="http://api.flickr.com/services/feeds/photos_public.gne"
        result="photoHandler(event)" />
    <mx:HBox>
        <mx:Label text="Flicker tags" />
        <mx:TextInput id="searchTerm" />
        <mx:Button label="Search" click="requestPhotos()"/>
    </mx:HBox>
    <mx:TileList width="100%" height="100%"
        dataProvider="{photoBindable}"
        itemRenderer="thumbnail">
    </mx:TileList>
</mx:Application>

这是itemRender thumbnail.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="75" height="75"
        horizontalScrollPolicy="off" verticalScrollPolicy="off"
        paddingBottom="5" paddingLeft="5" paddingTop="5">
    <mx:Image width="75" height="75" source="{data.thumbnail.url}" />
    <mx:Text text="{data.credits}" />
</mx:VBox>

3 个答案:

答案 0 :(得分:1)

当然,XML或.php文件中有错误,可能是空格或其他内容;检查xml的第一行,它只能从以下语句开始:

<?xml version="1.0" encoding="utf-8"?>

我很确定你忘了导入itemRender:

<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.rpc.events.ResultEvent;
        import itemRender; //substitute itemRender with your own itemRender.mxml file
    ]]>
</mx:Script>

无论如何看看这个page,即使它是意大利语,代码也很容易理解。

希望有用

答案 1 :(得分:1)

我认为问题出现在 event.result.rss.channel.items 标签中 删除额外的's'..... 这个例子很好......它对我有用......你可以使用下面的代码来检查

在这里打印我的代码......我添加了更多东西

FlickrPrj.mxml          

    <mx:Script>
        <![CDATA[
            import mx.events.ListEvent;
            import mx.controls.Alert;
            import mx.managers.PopUpManager;
            import mx.rpc.events.ResultEvent;
            import mx.collections.ArrayCollection;

           [Bindable]
           public var photoFeed:ArrayCollection;

            public function searchFlickr():void {
                photoService.cancel();
                var params:Object = new Object();
                    params.format = 'rss_200_enc';
                    params.tags = srchTxtId.text;               
                photoService.send(params);
            }

            public function resultHandler(event:ResultEvent):void {
                photoFeed = event.result.rss.channel.item as ArrayCollection;
            }

            public function openPanel(levent:ListEvent):void {
                var panelCmpObj:panelcomp = new panelcomp();    
                   panelCmpObj.source = levent.itemRenderer.data.content.url;           
                PopUpManager.addPopUp(panelCmpObj,this,true);
            }
            public function test():void {
                Alert.show('testtest');
                }           

        ]]>
    </mx:Script>

    <mx:HTTPService id="photoService" url="http://api.flickr.com/services/feeds/photos_public.gne" result="resultHandler(event)"/>

    <mx:HBox width="362" height="24">
        <mx:TextInput id="srchTxtId"/>
        <mx:Button label="Search for pics" id="srchBtnId" click="searchFlickr()"/>
    </mx:HBox>
    <mx:TileList id="imgTileList" dataProvider="{photoFeed}" width="100%" height="100%" itemClick="openPanel(event)">   
    <mx:itemRenderer>
        <mx:Component>
          <mx:VBox width="125" height="125"
                paddingBottom="5"
                paddingLeft="5"
                paddingTop="5"
                paddingRight="5">
                <mx:Image width="75" height="75" source="{data.thumbnail.url}"/>
          </mx:VBox>
        </mx:Component>
    </mx:itemRenderer>
    </mx:TileList>

</mx:Application>

panelcomp.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
        showCloseButton="true"
        styleName="noPadding"
        creationComplete="init();"
        close="titleWindow_close(event);">
<mx:Script>
        <![CDATA[
            import mx.managers.IFocusManagerComponent;
            import mx.controls.Alert;
            import mx.core.IFlexDisplayObject;
            import mx.events.CloseEvent;
            import mx.managers.PopUpManager;

            [Bindable]
            public var source:String;

            private function init():void {
                PopUpManager.centerPopUp(this);
            }

            private function titleWindow_close(evt:CloseEvent):void {
                PopUpManager.removePopUp(evt.target as IFlexDisplayObject);
            }
        ]]>
    </mx:Script>

    <mx:Image width="379" height="261" id="imgId" source="{source}"/>
       <mx:ControlBar horizontalAlign="right" width="100%">
    </mx:ControlBar>

</mx:TitleWindow>

注意将FlickPrj.mxml和panelcomp.mxml放在同一目录中。

答案 2 :(得分:0)

这意味着加载的xml文件编写不正确,尝试在IE(或altova等一些xml工具)中打开它,看看它有什么问题。