Jul,
The definition in your class only says that the restaurant list is a
List<Restaurant>.
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 List<Restaurant>
And it appears that gson.fromJson does exactly that - returns a
List<Restaurant>, which is actually a LinkList<Restaurant>.
-- 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.
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<[email protected]> 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<[email protected]> 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<[email protected]> 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 »
--
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