Ah, right, much clearer now that I see this code.


The issue is that a request to an HTTP URL via something like URLLoader
is asynchronous, so the SWF script is not held up waiting for the
network to respond. This means you will need to wait until the response
comes back some time later, i.e. when the result handler is called,
before accessing the generateXML property.

So, I would architect this a little differently.

Decouple the logic for loading XML into a service helper class and then
when you get back a response pass that to a utility method to actually
generate the XML.


-----Original Message-----
From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Suzy Lawson
Sent: Monday, June 05, 2006 11:52 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: Instantiation and setting problems - Example
included

  Thanks for your response...this error is still haunting so I included
a simple example to show my problem of class variables not being able to
be set after I initialize a new class. Even if I move the "generateXML"
method into the complete Handler....the same null pointer is still
thrown. Any ideas why??

Top-level MXML file:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
      <mx:Script>
            <![CDATA[
            private function setValue() : void
            {
                  var testA : TestA = new TestA();
                  xmlValue.text =
testA.generateXML("55").toXMLString();
            }
            ]]>
      </mx:Script>
      <mx:Button label="Set Value" click="setValue()"/>
      <mx:Label id="xmlValue"/>
</mx:Application>

_-----------------------------------------
//TestA class
package
{
      import flash.events.Event;
      import flash.net.URLLoader;
      import flash.net.URLRequest;

     
      public class TestA
      {
            private var sampleXML : XML ;
           
            public function TestA() : void
            {
                  var loader : URLLoader = new URLLoader();
            loader.addEventListener(Event.COMPLETE, completeHandler);
                  loader.load(new URLRequest("sample.xml"));
            }
           
            private function completeHandler(event:Event):void {
            sampleXML = new XML(event.target.data);
          }
         
          public function generateXML(value : String) : XML
            {
                  [EMAIL PROTECTED] = value; // error is here b/c
sampleXML is 'null'
                  return sampleXML;
            }
      }
}
------------------------------------
sample.xml file:
<test id="" data=""> --------------------------
The exact error I get is:
TypeError: Error #1009: Cannot access a property or method of a null
object reference.
      at TestA/generateXML()[C:\flex\TestA.as:25]
      at sampleBug/sampleBug::setValue()[C:\flex\sampleBug.mxml:8]
      at sampleBug/___Button1_click()[C:\flex\sampleBug.mxml:12]

--- In flexcoders@yahoogroups.com, "Peter Farland" <[EMAIL PROTECTED]> wrote:
>
> I'd have to see the code to really understand what is going on, but
can you avoid doing anything in a constructor and use a button or
something to trigger the work to see if that's the issue?
>
> -----Original Message-----
> From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED]
On Behalf Of Suzy Lawson
> Sent: Friday, June 02, 2006 4:54 PM
> To: flexcoders@yahoogroups.com
> Subject: [flexcoders] Re: Instantiation and setting problems
>
> I'm using the Cairngorm framework, so in the implented Command
classes...
>
> For the XML problem, it's in a class that the Command class calls.
The constructor load the XML file stored locally, then the
completeHandler  calls XML(event.target.data) and assigns the XML to a
local variable.
>
> However, when I instantiate this object, then call a method on it,
the XML is still null. If I put a timer on it to stall for a second,
it's there....
>
> --- In flexcoders@yahoogroups.com, "Peter Farland" <pfarland@> wrote:
> >
> >
> > Where are you declaring these classes?
> > 
> >
> > -----Original Message-----
> > From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED]
> On Behalf Of Suzy Lawson
> > Sent: Friday, June 02, 2006 12:01 PM
> > To: flexcoders@yahoogroups.com
> > Subject: [flexcoders] Instantiation and setting problems
> >
> > I anyone else having issues trying to set values on objects for
> newly instantiated objects in an object graph with 3 or more layers?
> >
> > I have the following:
> >
> > ClassA {
> >  public var classB : ClassB;
> >  public var classC : ClassC;
> > }
> >
> > ClassB {
> >  public var classD : ClassD;
> > }
> >
> > ClassC {
> >  public var textVal : String='';
> > }
> >
> > and i have a value sets in the ModelLocator (cairngorm) class like
so:
> > public var allClassAs : ArrayCollection; public var selectedClassA :
> ClassA;
> >
> > The problem is if I retrieve a single 'ClassA' from the collection
> of allClassAs using the ID of the selectedClassA, then try to make a
call like this:
> > classA.classC.text="Whatever";
> >
> > The mxml field I have bound to that value never displays and I get
> the following debug error.
> >
> > error during evaluation
> > no such variable: classA.classC.textVal
> >
> > This kind of makes sense since classC wasn't initialized yet, so
> even if I change ClassA to be:
> > ClassA {
> >  public var classB : ClassB = new ClassB();  public var classC :
> ClassC = new ClassC(); }
> >
> > I still get the same error. In the UI, if I click back, it appears
> correctly, but the first time it always fails. It seems like the set
> > (classA.classC.text="Whatever";) is getting called faster then the
> object can be initialized (constructed).
> >
> > I've had similar problems when calling:
> > var myXML = new XML(event.target.data); [EMAIL PROTECTED]"3232";
> >
> > When I debug this, myXML is still null when the 2nd line is called.
> A work around is to instantiate the XML on startup so the XML is
there before calling the set on @ID, but means more memory.
> >
> > Anyone else hitting these issues? 
> >
> >
> >
> >
> >
> >
> > ------------------------ Yahoo! Groups Sponsor
> --------------------~--> Everything you need is one click away.
Make Yahoo! your home page now.
> > http://us.click.yahoo.com/AHchtC/4FxNAA/yQLSAA/nhFolB/TM
> > --------------------------------------------------------------------
> > ~-
> > >
> >
> > --
> > Flexcoders Mailing List
> > FAQ:
> > http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> > Yahoo! Groups Links
> >
>
>
>
>
>
>
>
> ------------------------ Yahoo! Groups Sponsor
--------------------~--> Home is just a click away.  Make Yahoo! your
home page now.
> http://us.click.yahoo.com/DHchtC/3FxNAA/yQLSAA/nhFolB/TM
> --------------------------------------------------------------------~-
> >
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>





------------------------ Yahoo! Groups Sponsor --------------------~-->
Get to your groups with one click. Know instantly when new email arrives
http://us.click.yahoo.com/.7bhrC/MGxNAA/yQLSAA/nhFolB/TM
--------------------------------------------------------------------~->

--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives:
http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links








--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com




SPONSORED LINKS
Web site design development Computer software development Software design and development
Macromedia flex Software development best practice


YAHOO! GROUPS LINKS




Reply via email to