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

Reply via email to