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,
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 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 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 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
--
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