![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2010
Сообщений: 5
|
Здравствуйте, дорогие форумчане!
Помогите, пожалуйста разобраться. Пишу флешку, где при нажатии на кнопочку из xmlки должно подтягиваться якобы предсказание на день, месяц, неделю или год(сами предсказания я пока заменила цыфрами), кнопок 4, обозначают они как раз день, неделю, месяц, год. Для каждой кнопки будет несколько предсказаний, предсказания выводятся при нажатии рандомно. package {
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flashx.textLayout.accessibility.TextAccImpl;
import flash.net.URLRequestMethod;
import fl.events.*;
import flash.display.MovieClip;
public class SharikTest extends MovieClip
{
private var randomElement:Number;
private var randomElementWeek:Number;
private var randomElementMonth:Number;
private var randomElementYear:Number;
private var xml:XML;
private var xmlList:XMLList;
private var maxMes:uint;
private var dayMessage : Array;
public function SharikTest()
{
day_btn.addEventListener(MouseEvent.CLICK, onClick);
loadXml();
}
private function loadXMLList(e:Event):void{
var xml:XML=new XML();
var xmlList:XMLList=new XMLList();
var maxMes:uint=10;
}
private function loadXml(e:MouseEvent=null):void{
var xmlRequest:URLRequest=new URLRequest('day.xml');
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(xmlRequest);
}
private function xmlLoaded(e:Event):void{
xml=XML(e.target.data);
xmlList=xml.children();
updateText();
}
private function updateText():void{
day_txt.htmlText='';
var i:uint=0;
if(xmlList.length()>maxMes)
i=xmlList.length()-maxMes;
for(i;i<xmlList.length(); i++){
//day_txt.htmlText+='<b>'+ xmlList[i].name+'</b>('+xmlList[i].date+'):';
day_txt.htmlText+=' '+ xmlList[i].text;
}
var newXml:XML=XML('<dayMessage>'+randomElement+'</dayMessage><weekMessage>'+randomElementWeek+'</weekMessage><monthMessage>'+randomElementMonth+'</monthMessage>'+randomElementYear+'<yearMessage></yearMessage>');
trace(newXml);
var phpRequest:URLRequest = new URLRequest('messanges.php');
phpRequest.data=newXml;
phpRequest.contentType='text/xml';
phpRequest.method=URLRequestMethod.POST;
var phpLoader:URLLoader = new URLLoader();
phpLoader.addEventListener(Event.COMPLETE, xmlSended);
phpLoader.load(phpRequest);
}
private function xmlSended(e:Event):void{
loadXml();
}
//день
private function onClick(e:MouseEvent):void
{
var randomElement:Number = Math.floor(Math.random()*dayMessage.length);
day_txt.text = dayMessage [randomElement];
}
public function XMLTest() {
var daysMessages : Array = splitChildItems(xml, "dayMessage");
trace (daysMessages[int(Math.random() * (daysMessages.length-1))]);
}
private function splitChildItems(xml : XML, childName : String) : Array {
var result : Array = [];
var object : Object;
var regexp : RegExp = /\"([^\"]+)\"/g;
while (object = regexp.exec(String(xml[childName]))) {
result[result.length] = object[1];
}
return result;
}
}
}
TypeError: Error #1088: Разметка в документе, следующим за корневым элементом, должна быть в правильном формате. at SharikTest/updateText() at SharikTest/xmlLoaded() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete() TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at SharikTest/onClick() |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
По поводу разметки, очевидно, что вы работаете с не валидным XML. Используйте метод toXMLString(), чтобы ее проверить.
Вообще, при работе с XML настоятельно рекомендую использовать try/catch, ибо случаи не валидности довольно часто встречаются. По поводу null, очевидно что либо day_txt, либо dayMessage у вас == null, когда вызывается метод onClick.
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Он в принципе вродь валидный, но в обьект типа XML можно конвертить только xml с одним тегом в корне, а там их много. Используйте XMLList для такого
а вообще не видны попытки разобраться, таким помогать неинтересно
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 10.09.2010 в 12:55. |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 5
|
вот попыталась немного подправить код, пока пытаюсь сделать кнопку с подгрузкой предсказания для одного элемента.
package {
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flashx.textLayout.accessibility.TextAccImpl;
import flash.net.URLRequestMethod;
import fl.events.*;
import flash.display.MovieClip;
public class SharikTest extends MovieClip
{
private var randomElement:Number;
private var xml:XML;
private var xmlList:XMLList;
private var maxMes:uint;
private var dayMessage : Array;
public function SharikTest()
{
day_btn.addEventListener(MouseEvent.CLICK, onClick);
loadXml();
}
private function loadXMLList(e:Event):void{
var xml:XML=new XML();
var xmlList:XMLList=new XMLList();
var maxMes:uint=10;
}
private function loadXml(e:MouseEvent=null):void{
var xmlRequest:URLRequest=new URLRequest('day.xml');
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(xmlRequest);
}
private function xmlLoaded(e:Event):void{
xml=XML(e.target.data);
xmlList=xml.children();
updateText();
}
private function updateText():void{
day_txt.htmlText='';
var i:uint=0;
if(xmlList.length()>maxMes)
i=xmlList.length()-maxMes;
for(i;i<xmlList.length(); i++){
//day_txt.htmlText+='<b>'+ xmlList[i].name+'</b>('+xmlList[i].date+'):';
day_txt.htmlText+=' '+ xmlList[i].text;
}
var newXml:XMLList = XMLList('<dayMessage>'+randomElement+'</dayMessage>');
trace(newXml);
//день
private function onClick(e:MouseEvent):void
{
var randomElement:Number = Math.floor(Math.random()*dayMessage.length);
day_txt.text = dayMessage [randomElement];
}
public function XMLTest() {
var daysMessages : Array = splitChildItems(xml, "dayMessage");
trace (daysMessages[int(Math.random() * (daysMessages.length-1))]);
}
private function splitChildItems(xml : XML, childName : String) : Array {
var result : Array = [];
var object : Object;
var regexp : RegExp = /\"([^\"]+)\"/g;
while (object = regexp.exec(String(xml[childName]))) {
result[result.length] = object[1];
}
return result;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<day>
<dayMessage>"Да","Нет","Не знаю"</dayMessage>
</day>
N:\флеш\учусь\шар\SharikTest.as, Line 64 1013: The private attribute may be used only on class property definitions. N:\флеш\учусь\шар\SharikTest.as, Line 71 1114: The public attribute can only be used inside a package. N:\флеш\учусь\шар\SharikTest.as, Line 76 1013: The private attribute may be used only on class property definitions. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|