2011-04-22 57 views
1

我正在構建AIR應用程序,該應用程序將用於編輯其他應用程序(也由我構建,但不在AIR中)的幻燈片。幻燈片和其他數據是在其他應用程序的程序文件夾中的多個xml文件中定義的。當試圖將這些加載到我的AIR應用程序,我得到以下錯誤:AIR:在應用程序文件夾外加載本地xml文件

fault(mx.messaging.messages::ErrorMessage)#0 
    body = "" 
    clientId = "DirectHTTPChannel0" 
    correlationId = "D67CFDDA-2A2E-9D8B-21DE-7D9FB4B72167" 
    destination = "" 
    extendedData = (null) 
    faultCode = "Server.Error.Request" 
    faultDetail = "Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: app:/Users/path/to/folder/languages.xml" errorID=2032]. URL: /Users/path/to/folder/languages.xml" 
    faultString = "HTTP request error" 
    headers = (Object)#1 
    DSStatusCode = 0 
    messageId = "F54EACC8-22F3-3718-9106-7D9FB4E0649C" 
    rootCause = (flash.events::IOErrorEvent)#2 
    bubbles = false 
    cancelable = false 
    currentTarget = (flash.net::URLLoader)#3 
     bytesLoaded = 0 
     bytesTotal = 0 
     data = "" 
     dataFormat = "text" 
    errorID = 2032 
    eventPhase = 2 
    target = (flash.net::URLLoader)#3 
    text = "Error #2032: Stream Error. URL: app:/Users/path/to/folder/languages.xml" 
    type = "ioError" 
timestamp = 0 
timeToLive = 0 

這是我是如何編碼它:

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="windowedapplication1_creationCompleteHandler(event)"> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 

     protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
     { 
      this.languages.addEventListener(FaultEvent.FAULT, this.faultHandler); 
      this.languages.addEventListener(ResultEvent.RESULT, resultHandler); 

      this.languages.send(); 
     } 

     private function faultHandler(event:FaultEvent):void 
     { 
      trace("fault" + event.message); 
     } 

     private function resultHandler(event:ResultEvent):void 
     { 
      trace("success" + event.result); 
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
    <s:HTTPService id="languages" url="/Users/path/to/folder/languages.xml"/> 
</fx:Declarations> 
</s:WindowedApplication> 

我怎樣才能從這些文件中讀取?該應用程序將不需要與除本地文件以外的其他任何東西進行通信。

由於J_A_X的回答,我改變了我的creationCompleteHandler到:

var file:File = new File("/Users/path/to/folder/languages.xml"); 

var fs:FileStream = new FileStream(); 
fs.open(file, FileMode.READ); 
var text:String = fs.readUTFBytes(file.size); 
trace(text); 

這工作就像一個魅力。

回答

1

HTTPService用於HTTP通信。獲取本地文件不是HTTP。您想查看File類來打開/讀取您的xml。

+0

謝謝,這工作完美!雖然我可以輕鬆地使用HTTPService調用來打開bin文件夾中的xml文件,但不在其外部,但我發現它很奇怪。我想知道我是否會想方設法解決所有Flex/Flash的怪癖...... =) – Lizzan 2011-04-22 15:09:08

+0

這是不同的。在bin-debug中,它可以工作,因爲它通過瀏覽器並且瀏覽器將其解釋爲http調用(即使它是本地文件),但是如果您使用的是Air,則會發生變化。不是真正的Flex怪癖,更像是一個協議怪癖:P – 2011-04-22 15:31:32

+0

因此,它仍然像一個http調用,即使它不在瀏覽器中,只是在AIR應用程序中?如果是這樣,多一點意義,謝謝! =) – Lizzan 2011-04-22 17:30:26

相關問題