AIR:在应用程序文件夹外加载本地xml文件
问题描述:
我正在构建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);
这工作就像一个魅力。
谢谢,这工作完美!虽然我可以轻松地使用HTTPService调用来打开bin文件夹中的xml文件,但不在其外部,但我发现它很奇怪。我想知道我是否会想方设法解决所有Flex/Flash的怪癖...... =) – Lizzan 2011-04-22 15:09:08
这是不同的。在bin-debug中,它可以工作,因为它通过浏览器并且浏览器将其解释为http调用(即使它是本地文件),但是如果您使用的是Air,则会发生变化。不是真正的Flex怪癖,更像是一个协议怪癖:P – 2011-04-22 15:31:32
因此,它仍然像一个http调用,即使它不在浏览器中,只是在AIR应用程序中?如果是这样,多一点意义,谢谢! =) – Lizzan 2011-04-22 17:30:26