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<[email protected]> wrote:Jul, Parcelable implementation 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 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 usingprotected void onSaveInstanceState(Bundle outState) {if (restaurantList != null ) { outState.putParcelableArrayList("restoList", (ArrayList<Restaurant>)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 suggestionJulien**************************RestaurantList class**************************public class RestaurantList {private List<Restaurant> restaurants = new ArrayList<Restaurant>();public int getSize() { return restaurants.size(); }public List<Restaurant> getRestaurants() { return this.restaurants; }public Restaurant getRestaurant(int i) { return this.restaurants.get(i); }public void setRestaurants(List<Restaurant> restaurants) { this.restaurants = restaurants; }public List<String> getRestaurantNames() {List<String> restaurantNames = new ArrayList<String>();for (int i=0; i<this.restaurants.size(); i++) {restaurantNames.add(this.restaurants.get(i).getName()); }return restaurantNames; }}**************************Restaurant class**************************public class Restaurant implements Parcelable{private String name; /* more stuff */public Restaurant() {}public String getName() { return this.name; }public void setName(String name) { this.name = name; }public void writeToParcel(Parcel out, int flags) {out.writeStringArray(new String[] {this.name, /* more stuff*/});}public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {public Restaurant createFromParcel(Parcel in) { return new Restaurant(in); }public Restaurant[] newArray(int size) { return new Restaurant[size]; }};private Restaurant(Parcel in) {String[] stringData = new String[6];in.readStringArray(stringData);this.name = stringData[0]; /* more stuff */}public int describeContents(){ return 0; }}-- Kostya Vasilev -- WiFi Manager + pretty widget --http://kmansoft.wordpress.com
-- Kostya Vasilev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com -- 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

