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

