Thanks a lot for your time Robert. You've been brilliant. I've just managed to 
find a similar solution somehwhere else but it's pretty much exactly the same 
as what you've suggested. I probably should use e4x too but t's the very fact 
that it needs to be implemented in a different way which puts me off. You're 
right about being consisten too by using event.result as this allows for easier 
modifications.
 
One problem that I seem to have in my code is the speed it takes to renew the 
dataprovider of the tilelist. Basically in my app the user can create new links 
remove links and update links which makes these changes directly to the mysql 
which obviously in turn feeds the xml file which populates the array 
collection/tilelist so these changes show in the app tilelist. The user can 
also switch between 9 different categories of links for all of the above 
actions. The thing is though each time the user clicks a category or does an 
action the app sends the request to the server which makes the change to the 
array collection but I've noticed that this takes a couple of seconds to 
refresh the tilelist data. So for example when the user is viewing the category 
1 links in the dataprovider and then clicks to category 2 it takes a few 
seconds to load this data but while it's being loaded the data from category 1 
is still there visible and selectable which I don't
 like at all.
 
Originally I wanted to have 9 tilelists each with different dataproviders but 
that seemed like overkill. Do you think it's best practice to have just 1 
tilelist? It's just the couple of seconds that it takes for it to switch from 1 
set of links to the next which I don't like.

--- On Mon, 19/4/10, Robert Moss <[email protected]> wrote:


From: Robert Moss <[email protected]>
Subject: Re: [flexcoders] Re: Problems With my XML Created Array Collection
To: [email protected]
Date: Monday, 19 April, 2010, 21:00


  





Yes use a third if statement like:  if(event.result. categories)   
if(event.result. categories != null) should also work

Notice I used event.result instead of LinksService. lastResult.  Small change, 
but you should get in the habit as LinksService. lastResult will cause some 
pain in the future if you decide to change it's name for some reason.  

Amy suggested using e4x which is probably the correct answer as e4x grants you 
consistency ( you do not have the arrayCollection returned sometimes and 
ObjectProxy others) and allows you to work with XML in actionscript like XML 
was meant to be accessed.  You will still have to trap for the same issues, 
just implemented in a different way.   We do not always use e4x although we 
probably should, being lazy will probably bite us one of these days.





From: James <garymoorcroft_ i...@yahoo. co.uk>
To: flexcod...@yahoogro ups.com
Sent: Mon, April 19, 2010 2:11:16 PM
Subject: [flexcoders] Re: Problems With my XML Created Array Collection

  

You were right about removeall ("flush" ha whoops) helping. I applied removeall 
before the if statements like you said and the first error is now gone.

The only problem I have now is the error which occurs when there are NO nodes 
in the xml i.e. all items have been removed and there are no values in my mysql 
table which relate to that specific category id.

I've changed the code to this:-

private function linksResultHandler( event:ResultEven t):void
{
LinksFullAC. removeAll( );
if(LinksService. lastResult. categories. category is ArrayCollection) {
LinksFullAC= LinksService. lastResult. categories. category as ArrayCollection;
}else if (LinksService. lastResult. categories. category is ObjectProxy)
{
var oCat:Object = new Object();
oCat.linkid = LinksService. lastResult. categories. category. linkid;
oCat.categoryid = LinksService. lastResult. categories. category. categoryid; 
oCat.label = LinksService. lastResult. categories. category. label;
oCat.icon = LinksService. lastResult. categories. category. icon;
oCat.link = LinksService. lastResult. categories. category. link;
LinksFullAC. addItem(oCat) ; 
}
}

The thing is though in that code I have the first if statement to check for if 
the result is an array collection which sets it as an array collection, the 
second if statement which if it is an object proxy adds the single object to 
the array collection but I think what I'll need is a third if statement which 
checks if the xml is empty/null or something and assign what will happen if it 
is null. Do you know of any way to do this and if so what do you think is best 
to set as the operation of such an if statement to make sure this error doesn't 
occur anymore? I thought it might be something like:-

if(LinksService. lastResult. categories. category is null)

but there seems to be no such thing. Any ideas?

Sorry to keep hassling but it's pretty much the last hiccup I've got in my app 
and I always try to pick the brains of guys who know their stuff as much as I 
can :-)

--- In flexcod...@yahoogro ups.com, Robert Moss <rdm0...@... > wrote:
>
> In essence yes, I do not think I would do it as part of the button click, but 
> instead clear it before the IF in the result handler with LinksFullAC. source 
> = new Array(); or LinksFullAC. removeAll( ); I prefer the former. 
> 
> As for your error, I'm not sure what's happening, but you should be able to 
> set a break in the result handler and see what is getting returned. It looks 
> like for the combination you describe, categories is not getting returned for 
> some reason. You'll need to figure out why and trap for it. The same goes for 
> returning 0 records. See what is getting returned and trap for it.
> 
> 
> 
> 
> 
> ____________ _________ _________ __
> From: James <garymoorcroft_ i...@...>
> To: flexcod...@yahoogro ups.com
> Sent: Mon, April 19, 2010 12:47:15 PM
> Subject: [flexcoders] Re: Problems With my XML Created Array Collection
> 
> 
> Hi Robert. Thanks so much for that my friend. 
> 
> I have some problems with it though. You see I have an event in my app 
> applied to a button (refresh button) which resends data via the LinksService 
> i.e. LinksService. send and I've noticed that with your code if there is only 
> 1 link i.e. 1 node and I click the refresh button it seems to keep recreating 
> that 1 over and over again as if it's recreating the same object in the array 
> collection or something. This doesn't happen if their are 2 or more 
> links/nodes/ objects. Perhaps I'll have to get the refresh button to empty 
> the array collection first before sending the data i.e. it's click function 
> would be "LinksFullAC. flush; LinksService. send()" Am I right?
> 
> I've also noticed now with your code applied if I select an item in the 
> tilelist and click the reresh button I get the error "Property categories not 
> found on String and there is no default value" which is indicating the error 
> at the if statement in the code you gave me and the LinksService itself. Any 
> idea what's causing this?
> 
> Another question though what if the xml contains no nodes? 
> 
> You see my xml file is dynamic, I have a variable in my app called categoryid 
> and that variable is based on a category that the user selects in my app and 
> is submitted to getlinks.php which gets all the records from my mysql table 
> which contain that specific submitted categoryid and output them as the xml 
> file. Some categoryids have no records (the user can add and delte records 
> via my app). Is there any way of getting it to handle 0 records/nodes as well 
> as handling muliple records/1record which it seems to already do?
> 
> Thanks so much for your help. Sorry to be a pain :-(
> 
> --- In flexcod...@yahoogro ups.com, Robert Moss <rdm0004@ > wrote:
> >
> > This is not exactly how I would implement, but you should get the idea. If 
> > you have multiple category nodes, then your LinksService. lastResult. 
> > categories. category is returned as an ArrayCollection and your code works. 
> > If it only has one node then LinksService. lastResult. categories. category 
> > is returned as an ObjectProxy. So in your return method you could have the 
> > following.
> > 
> > if(LinksService. lastResult. categories. category is ArrayCollection) {
> > LinksFullAC= LinksService. lastResult. categories. category as 
> > ArrayCollection;
> > }else
> > {
> > var oCat:Object = new Object();
> > oCat.id = LinksService. lastResult. categories. category. id;
> > oCat.label = LinksService. lastResult. categories. category. label;
> > oCat.icon = LinksService. lastResult. categories. category. icon;
> > LinksFullAC. addItem(oCat) ; // NOTE: LinksFullAC needs to not only be 
> > previously declared, but must also me instantiated with new 
> > ArrayCollection( ) for this line to work.
> > 
> > }
> > 
> > 
> > 
> > 
> > 
> > ____________ _________ _________ __
> > From: James <garymoorcroft_ ict@>
> > To: flexcod...@yahoogro ups.com
> > Sent: Mon, April 19, 2010 9:58:33 AM
> > Subject: [flexcoders] Re: Problems With my XML Created Array Collection
> > 
> > 
> > The thing is my xml is retrieved from a mysql database table which 
> > sometimes will have no records or 1 record which will mean the xml will 
> > have only 1 or no nodes which in turn causes the problem whereas sometimes 
> > it has many records therefore the xml file would have many nodes which 
> > would mean no problems.
> > 
> > I've heard of looping but can't figure out how to do it or apply it to my 
> > code. I've tried simply changing the array collection to xmllist collection 
> > but then the data doesn't seem to appear in my tilelist.
> > 
> > How would you loop using my specific code there because I always need it 
> > returned as an array collection to populate the tilelist but have no idea 
> > how to loop?
> > 
> > Cheers for your help so far.
> > 
> > --- In flexcod...@yahoogro ups.com, Robert Moss <rdm0004@ > wrote:
> > >
> > > We had the same issue, and in our case it was an easy fix. When we read 
> > > in the XML it was returning as an ArrayCollection as long as there were 
> > > multiple nodes. As you have found, if it was only one node it returned as 
> > > a generic object not an ArrayCollection. We were already looping through 
> > > the ArrayCollection to populate value objects that we were using to 
> > > populate our list. So before the loop we added, if xmlObject is an 
> > > ArrayCollection than loop else populate VO with returned data. Worked 
> > > without issues ever since.
> > > 
> > > Robert
> > > 
> > > 
> > > 
> > > 
> > > 
> > > ____________ _________ _________ __
> > > From: thomas parquier <mailinglists@ ...>
> > > To: flexcod...@yahoogro ups.com
> > > Sent: Mon, April 19, 2010 9:27:13 AM
> > > Subject: Re: [flexcoders] Problems With my XML Created Array Collection
> > > 
> > > 
> > > what about xmllistcollection ?;
> > > 
> > > ---
> > > thomas parquier
> > > http://www.web- attitude. fr/realisations/
> > > msn : thomas.parquier@ web-attitude. fr
> > > softphone : sip:webattitude@ ekiga.net
> > > tÃÆ'©lÃÆ'©phone portable : +33601 822 056
> > > 
> > > 
> > > 
> > > 2010/4/19 James <garymoorcroft_ i...@yahoo. co.uk>
> > > 
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > >
> > > >
> > > >>
> > > > 
> > > >> 
> > > > 
> > > >In my app I have an array collection which populates a tilelist. This 
> > > >array collection is populated by a remote xml file via a http request. 
> > > >Problem is if the xml only has 1 or no nodes I get a null object 
> > > >reference error. I know this is a known problem but I've never been able 
> > > >to find a valid solution for it which could be applied to my code. I've 
> > > >heard of looping through the xml to create an array collection or using 
> > > >xmllist collection but I don't know how these can be done whilst still 
> > > >allowing the data to be displayed in the tilelist. Can anyone help me 
> > > >out please?
> > > >
> > > >>The code for my httpservice, array collcection I'm trying to make and 
> > > >>the result of the http service and the tilelist it populates is shown 
> > > >>below. As I say this all works fine as long as the xml has more than 1 
> > > >>node but causes the error if it doesn't:-
> > > >
> > > >>http://www.coolvisi ontest.com/ getlinks. php"/>
> > > >
> > > >><mx:Script>
> > > >> <![CDATA[
> > > >
> > > >> import mx.rpc.events. ResultEvent;
> > > >> import mx.collections. ArrayCollection;
> > > >
> > > >> [Bindable] private var LinksFullAC: ArrayCollection;
> > > >
> > > >> private function linksResultHandler( event:ResultEven t):void
> > > >> {
> > > >> LinksFullAC= LinksService. lastResult. categories. category as 
> > > >> ArrayCollection;
> > > >> }
> > > >
> > > >
> > > >> ]]>
> > > >></mx:Script>
> > > >
> > > >><mx:TileList id="linkChoice" dataProvider= "{LinksFullAC} " 
> > > >>height="365" width="665"/ >
> > > >
> > > >>Here's my xml structure:-
> > > >
> > > >><categories>
> > > >> <category>
> > > >> <id></id> 
> > > >> <label></label> 
> > > >> <icon></icon> 
> > > >> </category>
> > > >></categories>
> > > >
> > > >>Obviously I need the array collection to be populated by id, label and 
> > > >>icon.
> > > >
> > > >>Thanks for any suggestions.
> > > >
> > > >
> > >
> >
>










      

Reply via email to