2011-04-22 2 views
1

다른 응용 프로그램의 슬라이드 쇼를 편집하는 데 사용되는 AIR 응용 프로그램을 만들고 있습니다. 슬라이드 쇼 및 기타 데이터는 다른 응용 프로그램의 프로그램 폴더에있는 여러 xml 파일에 정의되어 있습니다.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> 

가 어떻게 이러한 파일에서 읽을 수 있습니다 나는 다음과 같은 오류가 내 AIR 응용 프로그램에이를로드하려고 할 때? 응용 프로그램은 로컬 파일 이외의 다른 것들과 통신 할 필요가 없습니다. 마법처럼 일했다

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); 

: J_A_X의 대답에

덕분에, 나는 내 creationCompleteHandler을 변경했습니다.

답변

1

HTTP 통신에는 HTTPService가 사용됩니다. 로컬 파일을 가져 오는 것은 HTTP가 아닙니다. File 클래스를보고 XML을 열고 읽으려고합니다.

+0

감사합니다. 완벽하게 작동했습니다. 이상하게도 쉽게 찾을 수 있지만 HTTP 서비스 호출을 사용하여 bin 폴더에서 xml 파일을 열 수 있지만 외부에서는 사용할 수 없습니다. 나는 Flex/Flash의 모든 버젼들에 대해 내 머리를 터지게 될지 궁금하다. =) – Lizzan

+0

그건 다르다. 빈 디버그에서는 브라우저를 통과하기 때문에 브라우저가 http 호출 (로컬 파일 임에도 불구하고)로 해석되기 때문에 작동하지만 Air를 사용하는 경우 변경됩니다. 플렉스 버크 (twalk) 같은 것이 프로토콜 특질과 비슷합니다 : P –

+0

브라우저에없고 AIR 앱에있는 경우에도 HTTP 호출과 같습니다. 만약 그렇다면 조금 더 의미가 있습니다, 고마워요! =) – Lizzan