TypeError: Error #1009: Cannot access a property or method o

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben een swf aan het maken die met AS3 gegevens uit een xml file haalt. Alles werkt totdat ik de gegevens uit het attribuut field haal.

Dit is mijn code:

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest(""));

function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
Parseacco(xmlData);
}

function Parseacco(accommodatie:XML):void {
var lengte = accommodatie.product.length();
var i = (Math.round(Math.random() * lengte) ) ;

productnaam1_mc.productnaam.text = (accommodatie.product.name.text()[i]) ;
prijs1_mc.prijs.text = ("€ " + accommodatie.product.price.text()[i] + ",-");
bestemming1_mc.bestemming.text = ("in " + accommodatie.product.additional[i].field[2].(@name).text());

}


en dit is de foutmelding:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at xmlbannergoed_fla::MainTimeline/Parseacco()
at xmlbannergoed_fla::MainTimeline/LoadXML()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()


Ik heb het proberen te googlen maar kom er niet echt verder mee. Heeft iemand een idtje? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Je moet ook niet gaan googlen... Je moet gaan debuggen. De foutmelding geeft aan wat er aan de hand is. Er is blijkbaar een object null terwijl jij verwacht dat er wel wat is. Je zou wat dingen kunnen gaan tracen om te zien welk object null is of om te zien of overal wel in zit wat je verwacht. Als je flex gebruikt kun je natuurlijk ook rechtstreeks debuggen zodat je door je code heen kunt stappen en op elke stap kunt zien wat er in welke variabelen precies staat.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb gedebugged.

de volgende regel is het probleem:
bestemming1_mc.bestemming.text = ("in " + accommodatie.product.additional[i].field[2].(@name).text());

ik snap niet waarom ik deze foutmelding krijg. Als ik trace staan er wel gewoon de gegevens in die ik aanroep. En daarbij doe ik het zelfde in de regels erboven, en daarbij werkt het wel

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Nou, je doet niet hetzelfde als de regel erboven. Daar heb je het immers over de price terwijl je het in de foutregel over additional hebt. Ga dus nog maar even door met debuggen om te kijken op welk deel het nu precies mis gaat. Zitten er wel fields in de additional? Zijn dat er wel drie? Is je xpath code verder wel goed? Heb je je E4X code wel correct? Is er wel een attribute name? Is dat uberhaupt wle een node waar je text op kunt aanroepen?

Kortom, leuk dat je gedebugged hebt, maar je bent nog niet klaar. Ga dus nog maar even door met debuggen.

[ Voor 10% gewijzigd door Janoz op 29-03-2010 11:28 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja, al die dingen heb ik al nagekeken en klopen. Ik heb tenslotte gezegd dat in de trace wel de data eruit komt. Dus het script kan perfect de data uit het xml bestand halen

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Hmm. Als het script daadwerkelijk perfect de data uit de xml had kunnen halen dan had je de fout niet gekregen.
Dus een trace op accommodatie.product.additional[i].field[2].(@name).text() geeft precies het resultaat en bestemming1_mc.bestemming.text bestaat ook? Tja, dan zal er wel een bug zitten in de swf player.

Maar om eerlijk te zeggen heb ik meer vertrouwen in de swf player dan in jouw debug kwaliteiten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
trace geeft precies wat ik moet hebben. En movieclip met instancename bestemming1_mc bestaat ook met tekstvak met instancename bestemming hierin.

Maarja, echt geholpen wordt ik op deze manier niet. Gooi er maar een slotje op

ps. probleem net gevonden. Movieclip stond niet op eerste frame maar pas op 100. Zodra deze vanaf het eerste frame geladen wordt geeft ie geen problemen. Is dus geen probleem in mijn code en die zaken waren op de stage dus allemaal aangemaakt. Alleen wist ik niet dat ie op het eerste frame moest staan.

[ Voor 40% gewijzigd door Verwijderd op 29-03-2010 12:07 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Als jij heilig overtuigd bent van het feit dat er geen enkele fout in je code zit terwijl er toch echt foutmeldingen komen, dan zul je toch echt iets aan je attitude moeten doen.

Ondanks dat ik erg weinig ervaring heb met AS3 kan ik al zo een aantal fouten uit je code halen:

Ten eerste als ik op google zoek naar AS# en XML kom ik op http://www.republicofcode.com/tutorials/flash/as3xml/ waar staat hoe je iets dergelijkes goed zou kunnen testen.

Daarnaast ga jij er blijkbaar vanuit dat de array indexes 1 based zijn (als ik naar je random kijk) dus neem ik even aan dat je verwacht dat de 2 het tweede node pakt. Dat is dus niet zo.

Tot slot gebruik je "@name" wat de waarde van een attribuut geeft. De waarde daarvan is een string en geen node. Het lijkt mij dat je daarop dus geen text() hoeft aan te roepen.


Maar goed, jij zult het wel beter weten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zeg niet dat ik het beter weet, alleen maar dat ik niet geholpen wordt op jou manier. Ik heb het probleem dus al opgelost. En ik weet dat de array bij 0 begint. Zoals ik al 2 keer heb gezegd krijg ik de juist gegevens in de trace

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Ik vertelde alleen waar mijn aanname vandaan kwam. De code waarbij je random 1 van de node kiest levert namelijk een waarde 0 <= waarde <= length.

Ik ben trouwens erg benieuwd wat nu daadwerkelijk het probleem was.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ps. probleem net gevonden. Movieclip stond niet op eerste frame maar pas op 100. Zodra deze vanaf het eerste frame geladen wordt geeft ie geen problemen. Is dus geen probleem in mijn code en die zaken waren op de stage dus allemaal aangemaakt. Alleen wist ik niet dat ie op het eerste frame moest staan.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op maandag 29 maart 2010 @ 11:52:
En movieclip met instancename bestemming1_mc bestaat ook met tekstvak met instancename bestemming hierin.
Dat was dus niet waar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dat was dus wel waar, deze bestonden wel degelijk. Ik was mij alleen niet ervan bewust dat deze in de 1ste frame aanwezig moesten zijn

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Op het moment dat de code uitgevoerd werd was hij niet beschikbaar en een trace op dat object had aangegeven dat hij op dat moment niet beschikbaar was. Op dat moment had je compleet uit kunnen sluiten dat het uberhaupt aan het xml gedeelte zou kunnen liggen en je volledig op de movieclip kunnen richten.

Het punt is dat je allemaal dingen aanneemt. Jij zegt dat A en B bestaat en dat je dat echt al wel gechecked hebt. Vervolgens geeft de foutmelding aan dat er toch iets niet bestaat. Persoonlijk vind ik het dan niet heel vreemd dat ik je stellingen en beweringen dat je het toch echt gechecked hebt in twijfel trek.

Je bent echt niet de eerste die bij hoog en bij laag blijft beweren dat je code compleet correct is en opmerkingen daarop eerder als een aanval dan als hulp ziet. Het is handig om die instelling achter je te laten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik snap dat je zelf ook eerst zeker wilt weten dat al deze dingen kloppen. Als ik een trace doe van de gegevens die uit de xml komen. Dan ziet mijn trace er al volgt uit.

trace("in " + accommodatie.product.additional[i].field[2].(@name).text());

Hier kreeg ik gewoon ook mijn gegevens uit. Maakt niet uit als er iets of niets op de stage staat. Het was mij sowieso al duidelijk dat alles goed uit het xml gedeelte werd geladen. Ik heb ook verscheidene keren vermeld dat de trace van de gegevens uit de xml gewoon goed gaan. Maar ik had het gevoel dat hier iedere keer weer overheen gelezen werd.

Dat de movieclip op het 1ste frame nog niet beschikbaar was wist ik niet. Vandaar dat ik waarschijnlijk ook een vraag had.

Toch bedankt voor de moeite

Acties:
  • 0 Henk 'm!

Verwijderd

Aangezien je een assignment doet moest je dan ook simpelweg zowel right hand side en left hand side controleren. Niet enkel de right hand side.

Met een:
trace(bestemming1_mc.bestemming);
trace(("in " + accommodatie.product.additional[i].field[2].(@name).text()));

Had je het probleem er zo uit kunnen halen.
Pagina: 1