[android-developers] Re: Question about parcelable object
Thanks again Kostya. I don't understand why my List of Restaurant objects is a LinkedList, since I define it as private ListRestaurant restaurants = new ArrayListRestaurant(); 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 LinkedListRestaurant, then it blows at line Atable.java:254. I am guessing it's the line saying: outState.putParcelableArrayList(restoList, (ArrayListRestaurant)restaurantList.getRestaurants()); and the immediate cause is the cast from LinkedListRestaurant to ArrayListRestaurant, 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, (ArrayListRestaurant)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:
Re: [android-developers] Re: Question about parcelable object
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 ListRestaurant restaurants = new ArrayListRestaurant(); 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 Vasilyevkmans...@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 LinkedListRestaurant, then it blows at line Atable.java:254. I am guessing it's the line saying: outState.putParcelableArrayList(restoList, (ArrayListRestaurant)restaurantList.getRestaurants()); and the immediate cause is the cast from LinkedListRestaurant to ArrayListRestaurant, 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, (ArrayListRestaurant)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
[android-developers] Re: Question about parcelable object
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. ArrayListRestaurant restArray = new ArrayListRestaurant(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 ListRestaurant restaurants = new ArrayListRestaurant(); 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 Vasilyevkmans...@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 LinkedListRestaurant, then it blows at line Atable.java:254. I am guessing it's the line saying: outState.putParcelableArrayList(restoList, (ArrayListRestaurant)restaurantList.getRestaurants()); and the immediate cause is the cast from LinkedListRestaurant to ArrayListRestaurant, 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
Re: [android-developers] Re: Question about parcelable object
Jul, The definition in your class only says that the restaurant list is a ListRestaurant. List is an interface: http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html Actual implementations are, among others, ArrayList and LinkedList. The only thing they have in common is that they both implement the same interface: List. You can assign any actual implementation in one place (in RestaurantList field initializer), but it doesn't mean that all other places automagically use the same actual implementation, they are free to use any other, as long as it's a ListRestaurant And it appears that gson.fromJson does exactly that - returns a ListRestaurant, which is actually a LinkListRestaurant. -- Kostya 06.07.2010 19:11, jul пишет: 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. ArrayListRestaurant restArray = new ArrayListRestaurant(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 Vasilyevkmans...@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 ListRestaurantrestaurants = new ArrayListRestaurant(); 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 Vasilyevkmans...@gmail.comwrote: Jul, This is the heart of the problem in logcat: 07-05
[android-developers] Re: Question about parcelable object
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, (ArrayListRestaurant)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, Parcelable implementation looks good, except for the questionable cast to ArrayListRestaurant, 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 of Parcelable Restaurant objects on onSaveInstanceState. I created a Restaurant class extending Parcelable 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, (ArrayListRestaurant)restaurantList.getRestaurants()); } super.onSaveInstanceState(outState); } I get an error, I guess because Parcelable data 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** public class RestaurantList { private ListRestaurant restaurants = new ArrayListRestaurant(); public int getSize() { return restaurants.size(); } public ListRestaurant getRestaurants() { return this.restaurants; } public Restaurant getRestaurant(int i) { return this.restaurants.get(i); } public void setRestaurants(ListRestaurant restaurants) {
Re: [android-developers] Re: Question about parcelable object
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 LinkedListRestaurant, then it blows at line Atable.java:254. I am guessing it's the line saying: outState.putParcelableArrayList(restoList, (ArrayListRestaurant)restaurantList.getRestaurants()); and the immediate cause is the cast from LinkedListRestaurant to ArrayListRestaurant, 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, (ArrayListRestaurant)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 Vasilyevkmans...@gmail.com wrote: Jul, Parcelable implementation looks good, except for the questionable cast to ArrayListRestaurant, 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 of Parcelable Restaurant objects on onSaveInstanceState. I created a Restaurant class extending Parcelable 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,