Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.04.2012, 21:50
A.E.M. вне форума Посмотреть профиль Отправить личное сообщение для A.E.M. Найти все сообщения от A.E.M.
  № 1  
Ответить с цитированием
A.E.M.
 
Аватар для A.E.M.

Регистрация: Jun 2007
Сообщений: 61
Отправить сообщение для A.E.M. с помощью ICQ
Question Как исправить ошибку 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()
__________________
Да будет ФЛЭШ !

Старый 24.04.2012, 21:55
Darkwing Duck вне форума Посмотреть профиль Отправить личное сообщение для Darkwing Duck Найти все сообщения от Darkwing Duck
  № 2  
Ответить с цитированием
Darkwing Duck

Регистрация: Jun 2011
Сообщений: 12
на какой строчке ошибка то?
можешь и xml показать..

Старый 24.04.2012, 22:01
A.E.M. вне форума Посмотреть профиль Отправить личное сообщение для A.E.M. Найти все сообщения от A.E.M.
  № 3  
Ответить с цитированием
A.E.M.
 
Аватар для A.E.M.

Регистрация: Jun 2007
Сообщений: 61
Отправить сообщение для A.E.M. с помощью ICQ
ошибка появляется в панели "output", строка никакая не присваивается
ссылка на xml есть в коде, http://www.oreillynet.com/pub/feed/29
__________________
Да будет ФЛЭШ !

Старый 24.04.2012, 22:07
Darkwing Duck вне форума Посмотреть профиль Отправить личное сообщение для Darkwing Duck Найти все сообщения от Darkwing Duck
  № 4  
Ответить с цитированием
Darkwing Duck

Регистрация: Jun 2011
Сообщений: 12
попробуй так:

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

Старый 24.04.2012, 22:12
A.E.M. вне форума Посмотреть профиль Отправить личное сообщение для A.E.M. Найти все сообщения от A.E.M.
  № 5  
Ответить с цитированием
A.E.M.
 
Аватар для A.E.M.

Регистрация: Jun 2007
Сообщений: 61
Отправить сообщение для A.E.M. с помощью ICQ
нет, не помогло, тоже самое выдается
__________________
Да будет ФЛЭШ !

Старый 24.04.2012, 22:54
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
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);
			}

Старый 24.04.2012, 23:00
A.E.M. вне форума Посмотреть профиль Отправить личное сообщение для A.E.M. Найти все сообщения от A.E.M.
  № 7  
Ответить с цитированием
A.E.M.
 
Аватар для A.E.M.

Регистрация: Jun 2007
Сообщений: 61
Отправить сообщение для A.E.M. с помощью ICQ
Цитата:
Сообщение от expl Посмотреть сообщение
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());
				}
 
		}
	}
 
}
ошибка та же

Старый 24.04.2012, 23:07
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
не знаю что за ошибка, у меня всё выводится

Код 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);
			}
		}
 
	}
 
}

Старый 24.04.2012, 23:12
A.E.M. вне форума Посмотреть профиль Отправить личное сообщение для A.E.M. Найти все сообщения от A.E.M.
  № 9  
Ответить с цитированием
A.E.M.
 
Аватар для A.E.M.

Регистрация: Jun 2007
Сообщений: 61
Отправить сообщение для A.E.M. с помощью ICQ
Цитата:
Сообщение от expl Посмотреть сообщение
не знаю что за ошибка, у меня всё выводится

Код 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, в качестве параметра берет строку, с другим клиентом работает, с этим нет.
__________________
Да будет ФЛЭШ !

Старый 25.04.2012, 00:16
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так ошибка в другом – у Вас нет никакого newBookListField в хендлере.
Потому что объявленная приватная переменная не инициализируется, то есть остается null.
Вместо нее Вы создаете новую и инициализируете её.
Код AS3:
var newBookListField:ListDisplayField; // объявление члена класса, который виден в хендлере
 
public function Client1(){
 
	//Создаем ListDisplayField (адаптер)
	var newBookListField:ListDisplayField = new ListDisplayField(); // а инициализируете другую переменную, локальную!
...
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
1009 , xml
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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