They keys in the Java map are Strings and the values are B objects,
you could say it is HashMap<String, B>.
So suppose in Java i do this:

A objectA = new A();
objectA.myMap = new HashMap();
B objectB1 = new B();
objectB1.id = 1;
objectB1.name = "Test";
myMap.put("key1", objectB1);

In Flex if i iterate over the myMap property:

for each(var i:* in objectA.myMap) {
   if (i is B) {
     trace(i.id + " " + i.name);
   }
}

Doing this resets the B object inside myMap, so the trace prints NaN
and empty string.

If i dont use an instance of B:

for each(var i:* in objectA.myMap) {
   if (!(i is A)) {
     trace(i.id + " " + i.name);
   }
}

The trace prints 1 Test.

The main issue is that if i create an instance of B anywhere in my
code, the B object inside myMap resets.

The second issue is that inside the myMap property there are two
objects instead of just one, this additional object is a reference to
A and its key is "owner", so the myMap property looks like:

var myMap:Object = {owner:the A object, key1: the B object};


I have no idea where this reference to the A object comes from, but i
can live with that, the main issue is that i can't use the B class
because if i do the B objects inside the map are reset.


--- In flexcoders@yahoogroups.com, "Josh McDonald" <[EMAIL PROTECTED]> wrote:
>
> The problem I think is you're using the wrong data structures.
> 
> If your Java map looks like this:
> 
> HashMap<int, String> myMap;
> 
> What you'll get in Flex isn't what you've got below, it's an object like
> this:
> 
> var mymap : Object =
>   {
>     1: "String 1",
>     2: "String 2",
>     79: "Blue"
>   }
> 
> Not the structure that you're trying to coerce it to based on the
code you
> posted. But since this is clearly just "example" Flex code and I have no
> idea about what your Java looks like, I'm just guessing.
> 
> -Josh
> 
> On Tue, Sep 9, 2008 at 8:46 AM, dmiramontesval
> <[EMAIL PROTECTED]>wrote:
> 
> > I have this weird issue and i can't figure it out, let me explain:
> >
> > I have a java object A which has a HashMap variable myMap, this map
> > will hold objects of class B. In ActionScript i have the corresponding
> > class A which has a variable myMap but since there is no HashMap in
> > ActionScript its type is Object and i also have the corresponding
class B.
> >
> > [RemoteClass(alias="com.test.A")]
> > public class A {
> >  public var myMap:Object; // this is the HashMap in Java
> > }
> >
> > [RemoteClass(alias="com.test.B")]
> > public class B {
> >  public var id:Number;
> >  public var name:String;
> > }
> >
> > I need to put the objects B contained in the map inside a DataGrid so
> > i am obtaining the object of class A using a RemoteObject and then i
> > iterate over the myMap property using a for each in loop, like this:
> >
> > for each(var i:* in objectA.myMap) {
> > someArrayCollection.add(i);
> > }
> >
> > The first issue appears here, suppose the java HashMap contains 3
> > elements, in the ActionScript loop i get 4 elements, the fourth one
> > being a reference to the A object (its key appears as "owner"). In
> > order to avoid this i use the "is" operator like this:
> >
> > for each(var i:* in objectA.myMap) {
> >   if (i is B) {
> >     someArrayCollection.add(i);
> >   }
> > }
> >
> > Now here is the real issue, when i do this the B objects contained in
> > the myMap property are reset to their initial values (NaN and empty
> > string according to the B class). I changed the if condition to this
> > and worked:
> >
> > for each(var i:* in objectA.myMap) {
> >   if (!(i is A)) {
> >    someArrayCollection.add(i);
> >   }
> > }
> > When i did this the DataGrid shows the elements in the
> > someArrayCollection perfectly fine. I did a little more testing and i
> > "figured" out the issue, if i use an instance of class B anywhere in
> > my application, the values of the B objects inside the myMap property
> > are reset, for example:
> >
> > for each(var i:* in objectA.myMap) {
> >   if (i is B) {
> >      someArrayCollection.add(i);
> >   }
> > }
> > var test:B = new B();
> >
> > This resets the B objects inside the myMap property of the A object
> > which makes no absolute sense, this is why when i used the B class in
> > the if condition the objects reset their values.
> >
> > So the thing is whenever i use the B class, which is the class of the
> > objects inside myMap, the B objects are reset!!!! Does anyone know how
> > to fix this?????
> >
> > I am using Flex 2.01 hotfix 3, i wonder if this is some kind of bug
> > that was solved in a later release.
> >
> > Any help would be appreciated.
> >
> >
> > ------------------------------------
> >
> > --
> > Flexcoders Mailing List
> > FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > Search Archives:
> > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups
> > Links
> >
> >
> >
> >
> 
> 
> -- 
> "Therefore, send not to know For whom the bell tolls. It tolls for
thee."
> 
> http://flex.joshmcdonald.info/
> 
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: [EMAIL PROTECTED]
>


Reply via email to