Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как исправить ошибку 1009 при загрузке XML? (http://www.flasher.ru/forum/showthread.php?t=178581)

A.E.M. 24.04.2012 21:50

Как исправить ошибку 1009 при загрузке XML?
 
Есть клиент
Код AS3:

package{
 
        // Клиент, выводящий список книг издательства посредством адаптера ListDisplayField
        import flash.display.MovieClip;
        import flash.text.*;
        import flash.events.*;
        import flash.net.*;
 
        public class Client1 extends MovieClip{
 
                var xml:XML;
                var xmlLoader:URLLoader;
                var newBookListField:ListDisplayField;
 
                public function Client1(){
 
                        //Создаем ListDisplayField (адаптер)
                        var newBookListField:ListDisplayField = new ListDisplayField();
 
                        //Выбираем стиль текста
                        var format:TextFormat = new TextFormat();
                        format.size = 14;
                        format.font = "Arial";
 
                        //Устанавливаем стиль и положение текстового поля
                        newBookListField.x = 20;
                        newBookListField.y = 20;
                        newBookListField.width = 500;
                        newBookListField.height = 300;
                        newBookListField.border = true;
                        newBookListField.defaultTextFormat = format;
 
                        //Создаем список из O'Reilly New Books Feed (Atom)
                        var newBooksURL = "http://www.oreillynet.com/pub/feed/29";
                        xml = new XML();
                        var xmlURL:URLRequest = new URLRequest(newBooksURL);
                        xmlLoader = new URLLoader(xmlURL);
                        xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
                        //Добавляем текстовое поле в список отображения
                        addChild(newBookListField);
                }
 
                private function xmlLoaded(evtObj:Event){
 
                        xml = XML(xmlLoader.data);
                        //устанавливаем пространство имен xml по умолчанию
 
                        if (xml.namespace("") != undefined){
 
                                default xml namespace = xml.namespace("");
 
                        }
 
                        //Добавляем в ListDisplayField названия новых книг
                        for each (var bookTitle:XML in xml..entry.title){
 
                                        newBookListField.addItem(bookTitle.toString());
                                }
 
                }
        }
 
}

выдает ошибку

Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at Client1/xmlLoaded()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/onComplete()


Darkwing Duck 24.04.2012 21:55

на какой строчке ошибка то?
можешь и xml показать..

A.E.M. 24.04.2012 22:01

ошибка появляется в панели "output", строка никакая не присваивается
ссылка на xml есть в коде, http://www.oreillynet.com/pub/feed/29

Darkwing Duck 24.04.2012 22:07

попробуй так:

Код AS3:

for each (var bookTitle:XML in xml.entry)
{
      newBookListField.addItem(bookTitle.title);
}


A.E.M. 24.04.2012 22:12

нет, не помогло, тоже самое выдается

expl 24.04.2012 22:54

http://stackoverflow.com/questions/2...3s-xml-parsing
Код AS3:

                        var xml:XML = new XML(_loader.data);
                        var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
                        default xml namespace = ATOM;
                        for each (var entry:XML in xml.entry)
                        {
                                trace("title=" + entry.title);
                        }


A.E.M. 24.04.2012 23:00

Цитата:

Сообщение от expl (Сообщение 1076867)
http://stackoverflow.com/questions/2...3s-xml-parsing
Код AS3:

                        var xml:XML = new XML(_loader.data);
                        var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
                        default xml namespace = ATOM;
                        for each (var entry:XML in xml.entry)
                        {
                                trace("title=" + entry.title);
                        }


Исправил так:

Код AS3:

package{
 
        // Клиент, выводящий список книг издательства посредством адаптера ListDisplayField
        import flash.display.MovieClip;
        import flash.text.*;
        import flash.events.*;
        import flash.net.*;
 
        public class Client1 extends MovieClip{
 
                var xml:XML;
                var xmlLoader:URLLoader;
                var newBookListField:ListDisplayField;
 
                public function Client1(){
 
                        //Создаем ListDisplayField (адаптер)
                        var newBookListField:ListDisplayField = new ListDisplayField();
 
                        //Выбираем стиль текста
                        var format:TextFormat = new TextFormat();
                        format.size = 14;
                        format.font = "Arial";
 
                        //Устанавливаем стиль и положение текстового поля
                        newBookListField.x = 20;
                        newBookListField.y = 20;
                        newBookListField.width = 500;
                        newBookListField.height = 300;
                        newBookListField.border = true;
                        newBookListField.defaultTextFormat = format;
 
                        //Создаем список из O'Reilly New Books Feed (Atom)
                        var newBooksURL = "http://www.oreillynet.com/pub/feed/29";
                        xml = new XML();
                        var xmlURL:URLRequest = new URLRequest(newBooksURL);
                        xmlLoader = new URLLoader(xmlURL);
                        xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
                        //Добавляем текстовое поле в список отображения
                        addChild(newBookListField);
                }
 
                private function xmlLoaded(evtObj:Event){
 
                        var xml = XML(xmlLoader.data);
                        //устанавливаем пространство имен xml по умолчанию
                        if (xml.namespace("") != undefined){
                                var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
                                default xml namespace = ATOM;
                        }
                        //Добавляем в ListDisplayField названия новых книг
                        for each (var bookTitle:XML in xml..entry.title){
 
                                        newBookListField.addItem(bookTitle.toString());
                                }
 
                }
        }
 
}

ошибка та же

expl 24.04.2012 23:07

не знаю что за ошибка, у меня всё выводится

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
 
        /**
        * ...
        * @author
        */

        [Frame(factoryClass="Preloader")]
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        _loader = new URLLoader(new URLRequest("http://www.oreillynet.com/pub/feed/29"));
                        _loader.addEventListener(Event.COMPLETE, onLoadComplete);
                }
 
                private var _loader:URLLoader;
 
                private function onLoadComplete(event:Event):void
                {
                        var xml:XML = new XML(_loader.data);
                        var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
                        default xml namespace = ATOM;
                        for each (var entry:XML in xml.entry)
                        {
                                trace("title=" + entry.title);
                        }
                }
 
        }
 
}


A.E.M. 24.04.2012 23:12

Цитата:

Сообщение от expl (Сообщение 1076870)
не знаю что за ошибка, у меня всё выводится

Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
 
        /**
        * ...
        * @author
        */

        [Frame(factoryClass="Preloader")]
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        _loader = new URLLoader(new URLRequest("http://www.oreillynet.com/pub/feed/29"));
                        _loader.addEventListener(Event.COMPLETE, onLoadComplete);
                }
 
                private var _loader:URLLoader;
 
                private function onLoadComplete(event:Event):void
                {
                        var xml:XML = new XML(_loader.data);
                        var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
                        default xml namespace = ATOM;
                        for each (var entry:XML in xml.entry)
                        {
                                trace("title=" + entry.title);
                        }
                }
 
        }
 
}


вот все файлы приложения, попробуйте пожалуйста, может разберетесь

ListDisplayList.as

Код AS3:

package{
        import flash.text.TextField;
 
        public class ListDisplayField extends TextField implements IListDisplay{
 
                private var aList:Array;
 
                public function ListDisplayField(){
 
                        super(); // вызываем конструктор TextField
                        this.clear();
 
                }
 
                public function addItem(s:String):void{
 
                        this.aList.push(s);
                        this.update();
 
                }
 
                public function deleteItemAt(i:uint):Boolean{
 
                        if((i > 0) && (i <= aList.length)){
 
                                aList.splice(i-1, 1);
                                this.update();
                                return true;
 
                        } else {
 
                                return false;
                        }
                }
 
                public function clear():void{
 
                        aList = [];
                        this.update();
 
                }
 
                internal function update(){
 
                        var listText:String = "";
 
                        //обраюотаем массив для создания строки, разделенной переводами каретки
                        for (var i:Number = 0; i < aList.length; i++){
 
                                listText += aList[i] + "\r";
 
                        }
 
                        super.text = listText;
 
                }
 
                override public function set text(s:String):void{
 
                        throw new Error("Cannot directly set text property - use addItem() method");
 
                }
 
                override public function set htmlText(s:String):void{
 
                        throw new Error("Cannot directly set htmlText property");
 
                }
 
                override public function appendText(s:String):void{
 
                        throw new Error("Cannot append text - use addItem() method");
 
                }
 
                override public function replaceSelectedText(s:String):void{
 
                        throw new Error("Cannot replace selected text");
 
                }
 
                override public function replaceText(beginIndex:int, endIndex:int, newText:String):void{
 
                        throw new Error("Cannot replace text");
 
                }
        }
}

IListDisplay.as

Код AS3:

package{
 
        public interface IListDisplay{
 
                function addItem(s:String):void;
                function deleteItemAt(n:uint):Boolean;
                function clear():void;
        }
}

Client1.as - базовый

Код AS3:

package{
 
        // Клиент, выводящий список книг издательства посредством адаптера ListDisplayField
        import flash.display.MovieClip;
        import flash.text.*;
        import flash.events.*;
        import flash.net.*;
 
        public class Client1 extends MovieClip{
 
                var xml:XML;
                var xmlLoader:URLLoader;
                var newBookListField:ListDisplayField;
 
                public function Client1(){
 
                        //Создаем ListDisplayField (адаптер)
                        var newBookListField:ListDisplayField = new ListDisplayField();
 
                        //Выбираем стиль текста
                        var format:TextFormat = new TextFormat();
                        format.size = 14;
                        format.font = "Arial";
 
                        //Устанавливаем стиль и положение текстового поля
                        newBookListField.x = 20;
                        newBookListField.y = 20;
                        newBookListField.width = 500;
                        newBookListField.height = 300;
                        newBookListField.border = true;
                        newBookListField.defaultTextFormat = format;
 
                        //Создаем список из O'Reilly New Books Feed (Atom)
                        var newBooksURL = "http://www.oreillynet.com/pub/feed/29";
                        xml = new XML();
                        var xmlURL:URLRequest = new URLRequest(newBooksURL);
                        xmlLoader = new URLLoader(xmlURL);
                        xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
                        //Добавляем текстовое поле в список отображения
                        addChild(newBookListField);
                }
 
                private function xmlLoaded(evtObj:Event){
 
                        var xml = XML(xmlLoader.data);
                        //устанавливаем пространство имен xml по умолчанию
                        if (xml.namespace("") != undefined){
                                var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
                                default xml namespace = ATOM;
                        }
                        //Добавляем в ListDisplayField названия новых книг
                        for each (var bookTitle:XML in xml..entry.title){
 
                                        newBookListField.addItem(bookTitle.toString());
                                }
 
                }
        }
 
}

Добавлено через 7 минут
в первом файле не верно имя написал, правильно: ListDisplayField.as

Добавлено через 22 минуты
вот так кстати у меня тоже выводит
Код AS3:

for each (var bookTitle:XML in xml.entry){
                                        trace("title=" + bookTitle.title);
                                        //newBookListField.addItem(bookTitle.title);
                                }

а вот так нет, вот так выдается эта ошибка

Код AS3:

for each (var bookTitle:XML in xml.entry){
                                        //trace("title=" + bookTitle.title);
                                        newBookListField.addItem(bookTitle.title);
                                }

хотя почему не понятно, метод addItem определен в классе ListDisplayField, в качестве параметра берет строку, с другим клиентом работает, с этим нет.

Wolsh 25.04.2012 00:16

Так ошибка в другом – у Вас нет никакого newBookListField в хендлере.
Потому что объявленная приватная переменная не инициализируется, то есть остается null.
Вместо нее Вы создаете новую и инициализируете её.
Код AS3:

var newBookListField:ListDisplayField; // объявление члена класса, который виден в хендлере
 
public function Client1(){
 
        //Создаем ListDisplayField (адаптер)
        var newBookListField:ListDisplayField = new ListDisplayField(); // а инициализируете другую переменную, локальную!
...



Часовой пояс GMT +4, время: 21:20.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.