2012-05-15 31 views
0

好吧,我試圖訪問由章節組成的本地XML文檔,每章都有幾頁文本。我有一個條件,聽按鈕點擊和「翻頁」可以這麼說。 「if」工作正常:它在頁面中循環直到達到結尾。但「其他」條件不起作用。它甚至不會追蹤任何東西。我知道這是因爲此錯誤:在我的條件結束時出現錯誤:TypeError:Error#2007:參數文本必須爲非空

TypeError:錯誤#2007:參數文本必須爲非null。 () at flash.text :: TextField/set text() at thisArray/textLoader()

...但不知道如何解決它。我是否需要完全放棄通過文本循環閱讀的方法,或者我只是缺少一些小的東西?對不起,如果這些代碼是sl ...的...我已經調整了一下,試圖讓它工作。謝謝您的幫助。

下面是相關代碼:

package { 



import as3101.ui.formatA; 
    import flash.display.*; 
    import flash.text.*; 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 
    import flash.events.*; 
    import flash.utils.Dictionary; 
    import flash.events.*; 
    import flash.display.Loader; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 



public class thisArray extends MovieClip { 

     //XML Vars 
     private var xml:XML; 
     private var storyKeys:Dictionary = new Dictionary();  
     private var xmlLoader:URLLoader = new URLLoader(); 
     private var url:URLRequest = new URLRequest("storyXML.xml"); 
     //Text and Button Vars 
     private var formatting:formatA; 
     private var txta:TextField = new TextField(); 
     private var storyBox:Sprite = new Sprite(); 
     private var count:uint = 0; 
     private var storyText:XMLList; 
     private var nxtBtn:Sprite = new Sprite(); 

    public function thisArray() { 

      addChild(storyBox); 
      storyBox.addChild(txta); 
      storyBox.x = 0; 
      storyBox.y = 0; 
      txta.x = 0; 
      txta.y = 0; 
      storyBox.width = 500 
      storyBox.height = 400; 
      storyBox.buttonMode = true; 
      storyBox.mouseChildren = false; 
      xmlLoader.load(url); 
      xmlLoader.addEventListener(Event.COMPLETE, onXmlLoad); 
//external class formatA sets my text for size, font, etc... 
      formatting = new formatA(); 
      formatting.defField = txta; 
      txta.defaultTextFormat = formatting.myFormat; 
      txta.wordWrap = true; 

     trace ("class loaded: " + this); 


    } 

    private function onXmlLoad(e:Event):void { 

     xml = new XML(xmlLoader.data); 
     trace("XML Loaded"); 
     storyText = xml.chapters.chapter.page; 
     txta.text = storyText[count]; 
     buttonMaker(); 

     } 

    public function textLoader(e:MouseEvent):void { 


       count++; 
       if(count < txta.length) 
       { 
       trace("hi"); 
       txta.text = storyText[count]; 
       } else if (count == storyText.length) { 
        trace("bye"); 
        removeChild(nxtBtn); 


       } 
    } 


    public function buttonMaker() { 

        nxtBtn.graphics.lineStyle(3,333333); 
        nxtBtn.graphics.beginFill(0x333333); 
        nxtBtn.graphics.drawRect(0,0,50,30); 
        nxtBtn.graphics.endFill(); 
        nxtBtn.x = 480; 
        nxtBtn.y = 220; 
        addChild(nxtBtn); 
        nxtBtn.buttonMode = true; 
        nxtBtn.name = ("nextButton"); 
        nxtBtn.addEventListener(MouseEvent.CLICK, textLoader); 

    } 

這裏是我的XML文檔:

< XML版本= 「1.0」 編碼= 「UTF-8」? >

< storyText>

<章節>

<章ID = 「0」 名稱= 「一」>

 < page num="0" > Text Block A </page> 

     < page num="1" > Text Block B </page> 

     < page num="2" > Text Block C </page> 

     < page num="3" > Text Block D </page> 

< /章節>

<章ID =「1」name =「two」> </chapter>

<章ID = 「2」 名稱= 「3」> < /章節>

</storyAnswers>

< /章節>

</storyText>

回答

0

if(count < txta.length) { trace("hi"); txta.text = storyText[count]; }

Thi第一行應該是if(count < storyText.length)。現在它將比較文本字段txta中關聯的字符串長度,並將其與您需要保持在數組storyText範圍內的遞增整數進行比較。

另一件事是很難說出你的加載的XML沒有被髮布後會發生什麼。在加載後,使用storyText = xml.chapters.chapter.page;在storyText.length上運行一個跟蹤,以確保您實際使用的是不返回null的東西。

+0

謝謝你們,今天晚上我會試一試,看看能否解決問題。如果沒有,我也會上傳一個xml文件的樣本。 –

+0

當我切換(計數

0

我覺得應該是

if(count < txta.text.length) 

你需要得到在textarea的文本的長度,而不是文本區域本身:)

+0

好吧,我試過這個......你的建議可能比我之前做的更精確,但沒有任何改變。 「if」可以正常工作,直到它遇到XMLList中的最後一個元素,然後忽略我的「其他」條件並拋出null錯誤。 –

0

OKAY的長度!我只是想清楚我的問題是什麼。卡爾你是對的...我需要將我的count變量與storyText.length進行比較。我的問題是鍵入它就象這樣:

if(count < storyText.length) 

時,我應該已經輸入它作爲這樣的:

if(count < storyText.length()) 

因此,誰能告訴我,爲什麼這個工程?我想說,加入()可以防止它爲空,但我認爲這是不正確的。再次感謝幫助我完成這項工作。

+0

沒有閱讀您的主要問題......「長度」是一個廣泛使用的屬性,例如對於'String','Array'等,而length()是一個顯式的XML屬性。 – inhan

相關問題