The type returned by restaurantList.getRestaurants() is LinkedList (I still don't understand why. I expect ArrayList, as you can see in my RestaurantList class definition in previous post). It now works if I create an ArrayList from the LinkedList.
ArrayList<Restaurant> restArray = new ArrayList<Restaurant>(restaurantList.getRestaurants()); outState.putParcelableArrayList("restoList", restArray); I'm now going to investigate why gson creates a LinkedList instead of an ArrayList... Thanks again for your time, it helped a lot. Julien On Jul 6, 4:38 pm, Kostya Vasilyev <kmans...@gmail.com> wrote: > Jul, > > What is the code around line 254 in Atable.java? > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > org.digitalfarm.atable.Atable.onSaveInstanceState(Atable.java:254) > > And, what does restaurantList.getRestaurants() really return, when > called from onSaveInstanceState ? > > -- Kostya > > 06.07.2010 18:19, jul пишет: > > > Thanks again Kostya. > > > I don't understand why my List of Restaurant objects is a LinkedList, > > since I define it as > > private List<Restaurant> restaurants = new > > ArrayList<Restaurant>(); > > in my RestaurantList class... > > > Anyway, I tried your fix, but I'm still messed with types: > > > -first, I had to cast restaurantList.getRestaurants().toArray() to > > (Restaurant[]), because it returns an Object[]: > > > Restaurant[] restArray = > > (Restaurant[])restaurantList.getRestaurants().toArray(); > > outState.putParcelableArray("restoList",restArray); > > > -and even with that, I get an error when executing putParcelableArray: > > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): > > java.lang.RuntimeException: Unable to pause activity > > {org.digitalfarm.atable/org.digitalfarm.atable.Atable}: > > java.lang.ClassCastException: [Ljava.lang.Object; > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread.performPauseActivity(ActivityThread.java: > > 2840) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread.performPauseActivity(ActivityThread.java: > > 2797) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread.handlePauseActivity(ActivityThread.java: > > 2780) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread.access$2000(ActivityThread.java:112) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread$H.handleMessage(ActivityThread.java:1699) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.os.Handler.dispatchMessage(Handler.java:99) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.os.Looper.loop(Looper.java:123) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread.main(ActivityThread.java:3948) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > java.lang.reflect.Method.invokeNative(Native Method) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > java.lang.reflect.Method.invoke(Method.java:521) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > com.android.internal.os.ZygoteInit > > $MethodAndArgsCaller.run(ZygoteInit.java:782) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > dalvik.system.NativeStart.main(Native Method) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): Caused by: > > java.lang.ClassCastException: [Ljava.lang.Object; > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > org.digitalfarm.atable.Atable.onSaveInstanceState(Atable.java:254) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.Activity.performSaveInstanceState(Activity.java:1008) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java: > > 1256) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): at > > android.app.ActivityThread.performPauseActivity(ActivityThread.java: > > 2822) > > 07-06 16:09:30.066: ERROR/AndroidRuntime(930): ... 12 more > > > Julien > > > On Jul 5, 10:17 pm, Kostya Vasilyev<kmans...@gmail.com> wrote: > > >> Jul, > > >> This is the heart of the problem in logcat: > > >> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): Caused by: > >> java.lang.ClassCastException: java.util.LinkedList > >> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >> org.digitalfarm.atable.Atable.onSaveInstanceState(Atable.java:254) > > >> My guess is that > > >> gson.fromJson > > >> creates a LinkedList<Restaurant>, then it blows at line Atable.java:254. > > >> I am guessing it's the line saying: > > >> outState.putParcelableArrayList("restoList", > >> (ArrayList<Restaurant>)restaurantList.getRestaurants()); > > >> and the immediate cause is the cast from LinkedList<Restaurant> to > >> ArrayList<Restaurant>, which are unrelated classes. > > >> To fix this, you can change the above code to read: > > >> Restaurant[] restArray = restaurantList.getRestaurants().toArray(); > >> outState.putParcelableArray("restoList",restArray); > > >> -- Kostya > > >> 05.07.2010 21:42, jul пишет: > > >>> Is it the right way to do it? The writeToParcel method of my > >>> Restaurant object is never called... > > >>> The error seems to be in > > >>> outState.putParcelableArrayList("restoList", > >>> (ArrayList<Restaurant>)restaurantList.getRestaurants()); > > >>> and I get in my LogCat: > > >>> 07-05 19:34:13.846: WARN/ActivityManager(563): Activity pause timeout > >>> for HistoryRecord{436950f8 {org.digitalfarm.atable/ > >>> org.digitalfarm.atable.Atable}} > >>> 07-05 19:34:28.336: DEBUG/AndroidRuntime(808): Shutting down VM > >>> 07-05 19:34:28.336: WARN/dalvikvm(808): threadid=3: thread exiting > >>> with uncaught exception (group=0x4000fe70) > >>> 07-05 19:34:28.336: ERROR/AndroidRuntime(808): Uncaught handler: > >>> thread main exiting due to uncaught exception > >>> 07-05 19:34:28.637: DEBUG/dalvikvm(808): GC freed 3337 objects / > >>> 259288 bytes in 94ms > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): > >>> java.lang.RuntimeException: Unable to pause activity > >>> {org.digitalfarm.atable/org.digitalfarm.atable.Atable}: > >>> java.lang.ClassCastException: java.util.LinkedList > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread.performPauseActivity(ActivityThread.java: > >>> 2840) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread.performPauseActivity(ActivityThread.java: > >>> 2797) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread.handlePauseActivity(ActivityThread.java: > >>> 2780) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread.access$2000(ActivityThread.java:112) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1699) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.os.Handler.dispatchMessage(Handler.java:99) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.os.Looper.loop(Looper.java:123) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread.main(ActivityThread.java:3948) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> java.lang.reflect.Method.invokeNative(Native Method) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> java.lang.reflect.Method.invoke(Method.java:521) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> com.android.internal.os.ZygoteInit > >>> $MethodAndArgsCaller.run(ZygoteInit.java:782) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> dalvik.system.NativeStart.main(Native Method) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): Caused by: > >>> java.lang.ClassCastException: java.util.LinkedList > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> org.digitalfarm.atable.Atable.onSaveInstanceState(Atable.java:254) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.Activity.performSaveInstanceState(Activity.java:1008) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java: > >>> 1256) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): at > >>> android.app.ActivityThread.performPauseActivity(ActivityThread.java: > >>> 2822) > >>> 07-05 19:34:28.647: ERROR/AndroidRuntime(808): ... 12 more > > >>> thanks for your help > > >>> On Jul 5, 6:31 pm, Kostya Vasilyev<kmans...@gmail.com> wrote: > > >>>> Jul, > > >>>>Parcelableimplementation looks good, except for the questionable cast > >>>> to ArrayList<Restaurant>, but that shouldn't have any effect. > > >>>> What error are you getting, exactly? > > >>>> -- Kostya > > >>>> 05.07.2010 20:20, jul пишет: > > >>>>> Hi, > > >>>>> I want to save a list ofParcelableRestaurant objects on > >>>>> onSaveInstanceState. I created a Restaurant class extendingParcelable > >>>>> and a RestaurantList object, both shown below. In my main activity I > >>>>> fill my RestauranList directly from json internet data using GSON: > > >>>>> restaurantList = gson.fromJson(r, RestaurantList.class); > > >>>>> Now, when I want to save the List of Restaurant objects using > > >>>>> protected void onSaveInstanceState(Bundle outState) { > > >>>>> if (restaurantList != null ) { > >>>>> outState.putParcelableArrayList("restoList", > >>>>> (ArrayList<Restaurant>)restaurantList.getRestaurants()); > >>>>> } > > >>>>> super.onSaveInstanceState(outState); > >>>>> } > > >>>>> I get an error, I guess becauseParcelabledata are not written. How > >>>>> should I do it? Do I have to create an array of Parcel objects in my > >>>>> main activity and fill it by calling writeToParcel for each of the > >>>>> Restaurant objects? > > >>>>> thanks for any suggestion > > >>>>> Julien > > >>>>> **************************RestaurantList > >>>>> class************************** > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en