Hi All,

I am observing a similar issue. I get structured data from my server
to Android client in XML format. I parse the XML into a HashMap, and
save this HashMap object in file persistent storage. Now, when I
retrieve this HashMap object saved in file through :
HashMap<String, Object> hashMap = (HashMap<String, Object>)
objectInputStream.readObject();

I get
GetFieldID: unable to find field Ljava/util/HashMap;.loadFactor:F


for about 150 times (interspersed with about 2 GC freed commands); and
then I am able to read my object. I am not getting any crash, but I
suppose this might be slowing my app. And I am wondering how I can
resolve this. Any clues would be appreciated.

Thanks,
Priyanka


On Apr 14, 11:30 pm, Naqi Syed <[email protected]> wrote:
> Hi Bob,
> Thanks for the help.Yes you are correct there is a difference in
> architecture which I naively dismissed, I changed it to JSON and everything
> is working correctly. I did tested with HashMap however but it was no
> different from what I saw on Hashtable.
> As for GC yes my problem turned out to be the Datagram Socket, i was
> initializing it every time I was making a datapacket and closing it
> afterwards. Once I tweaked the code a bit more it has gone down to
> acceptable levels.
>
> Thanks,
>
> Naqi
>
>
>
>
>
> On Wed, Apr 14, 2010 at 12:23 PM, Bob Kerns <[email protected]> wrote:
> > I don't have a solution, but I have a couple of recommendations --
> > either of which would avoid the problem.
>
> > #1 - don't use object serialization. Convert to an XML or JSON
> > representation instead. XML in particular would be preferred if you're
> > going to store these for an extended time.
>
> > #2 -- don't use Hashtable. It is a holdover from the early days of
> > Java, but it has inappropriate synchronization on various methods.
> > Use HashMap instead. This won't usually result in any other changes to
> > your code. If you were depending on the method synchronization of
> > Hashtable, you should take a good look at your code; it's likely you
> > weren't doing it right, and synchronizing on the table (or a larger-
> > scoped object) across a larger set of operations will fix bugs you may
> > not know you have. The synchronizing built into Hashtable is seldom
> > the actual synchronization needed!
>
> > Nothing in your message really suggests that your crash is related to
> > the message about serialization. If the loadfactor for the Hashtable
> > is set to zero, I suspect that would cause problems, but if it ends up
> > initialized to some reasonable default, this would be harmless. You
> > could check in the debugger pretty easily
>
> > The GC messages are not related to your problem. They indicate that
> > your program is causing the GC to run; this is of interest for
> > optimizing or analyzing performance.
>
> > On Apr 13, 12:11 pm, nsyed <[email protected]> wrote:
> > > Hi All,
>
> > > I am having a weird issue with serialization of a Hashtable. I have
> > > made a Server, Client app. Where server(PC/MAC) is serializing a
> > > Hashtable and sending it to Client(Android) through UDP. The data is
> > > sent/read correctly but I get a bunch of these messages below on
> > > LogCat.
>
> > > 04-12 11:19:43.059: DEBUG/dalvikvm(407): GetFieldID: unable to find
> > > field Ljava/util/Hashtable;.loadFactor:F
>
> > > Occasionally, I would see these
>
> > > 04-12 11:21:19.150: DEBUG/dalvikvm(407): GC freed 10814 objects /
> > > 447184 bytes in 97ms
>
> > > The app would run for 2-3 mins and then crash. Interestingly enough I
> > > do not see the Loadfactor errors on SDK 1.5. But I do see the GC Free
> > > xxxx objects, quiet often.
>
> > > After debugging I have found that the issue is with de-serialization
> > > and the error/warning are coming from following code
>
> > > Code:
>
> > > ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
> > > ObjectInputStream ois = new ObjectInputStream(bis);
> > > object = ois.readObject();
> > > at Code:
>
> > > object = ois.readObject();
> > > on the client. My server is serializing code is the following.
>
> > > Code:
>
> > > ByteArrayOutputStream bos = new ByteArrayOutputStream();
> > > ObjectOutputStream oos = new ObjectOutputStream(bos);
> > > oos.writeObject(obj);
> > > Any idea what is going on?
>
> > > Thanks for the Help!
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]<android-developers%2bunsubs­[email protected]>
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> > To unsubscribe, reply using "remove me" as the subject.
>
> --
> -Naqi Syed- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to