2012-08-08 3 views
0

플래시 미디어 서버에서 응용 프로그램의 인스턴스에 대해 'null'이 계속 표시됩니다. 나는 다른 함수에 하나의 함수에서 값을 전달할 수없는 것AS3는 두 함수 사이에서 xml의 rtmp 연결 문자열을 연결합니다.

XML 샘플

<bsettings> 
<obj title="instance">19046</owner> 
<obj title="id">uniqueid</owner> 
<obj title="name">somename</owner> 
<obj title="date">08/01/2012</owner> 
<obj title="gender">female</owner> 
</bsettings> 

AS3 코드 귀하의 문제는 XML이로드 될 때까지 기다리는하지 않을 것입니다

<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    applicationComplete="initConnection(event)"> 

private var xinstance:String; 
private var xmlstring:String = "http://www.blah.com/blahblah.xml"; 

protected function getXML():void{ 
XML.ignoreWhitespace = true; 
var myXML:XML; 
var myLoader:URLLoader=new URLLoader(); 
myLoader.load(new URLRequest(xmlstring)); 
myLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
myXML = new XML(e.target.data); 
for (var i:int = 0; i<myXML.*.length(); i++){ 
xinstance = myXML.obj[0]; 
xblah = myXML.obj[1]; 
xblah1 = myXML.obj[2]; 
xblah2 = myXML.obj[3]; 
xblah3 = myXML.obj[4]; 
} 
} 
} 

private function initConnection(event:FlexEvent):void{ 
getXML(); 

//problem here, the xinstance isn't saved in the fmsstring 
var fmsstring:String = "rtmp://blah.com/appname/" + xinstance; 

nc = new NetConnection(); 
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
nc.connect(fmsstring); 
nc.client = this; 
} 
+0

'xinstance'를 선언하지 않은 것처럼 보입니다. private var xinstance : String. 또한 XML 목록을 반복하고 매 반복마다 값을 xinstance에 지정합니다. XML 문서를 게시하면 더 나은 방법에 대한 정보를 얻을 수 있습니다. – BadFeelingAboutThis

+0

XML 샘플 데이터를 추가하고 이미 xinstance를 선언했지만 – Patriotec

+0

이상으로 복사하는 것을 잊어 버렸습니다. 내 대답이 업데이트되었습니다. 작동하지 않으면 의견을 말하십시오. – BadFeelingAboutThis

답변

1

xinstance 문자열을 사용하기 전에. initConnection 함수에서 getXML()을 호출하면 xml을로드하기 시작합니다. initConnection 함수에서 나머지 코드를 수행하기 전에 xml이로드 될 때까지 기다려야합니다. 여기에 제안 된 변경 사항이 있습니다 : (xml이 처리 된 후에 호출되는 go() 함수를 추가했습니다)

private var xinstance:String; 

protected function getXML():void { 
    var xmlstring:String = "http://www.blah.com/blahblah.xml"; 
    XML.ignoreWhitespace = true; 
    var myLoader:URLLoader=new URLLoader(); 
    myLoader.load(new URLRequest(xmlstring)); 
    myLoader.addEventListener(Event.COMPLETE, processXML); 
} 

protected function processXML(e:Event):void { 
    var myXML:XML = XML(e.target.data) 

    //THIS IS NOT A GOOD WAY TO DO THIS, use e4x 
    //for (var i:int = 0; i<myXML.*.length(); i++){ 
    //xinstance = myXML.obj[0]; 
    //xblah = myXML.obj[1]; 
    //xblah1 = myXML.obj[2]; 
    //xblah2 = myXML.obj[3]; 
    //xblah3 = myXML.obj[4]; 
    //} 

    //MUCH cleaner/easier/more efficient 
    xinstance = myXML.bsettings.obj.(@title == "instance"); 

    go(); 
} 

private function initConnection(event:FlexEvent):void{ 
    getXML(); 
} 

private function go():void { 
    var fmsstring:String = "rtmp://blah.com/appname/" + xinstance; 

    nc = new NetConnection(); 
    nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus); 
    nc.connect(fmsstring); 
    nc.client = this; 
} 
+0

title 매개 변수로 XML 처리를 시도했지만 첫 번째 XML 노드에서만 작동합니다. XML을 통해 루핑하는 코드를 사용하면 완벽하게 작동합니다. – Patriotec

+0

루핑은 마지막 하나만 사용합니다. – BadFeelingAboutThis

+0

전체 XML 세트를 루핑하는 이유를 이해하지 못합니다. 결국에는 사용하고있는 것입니다. 하나의 xinstance 값을 가진 하나의 NetConnection. – BadFeelingAboutThis