views:

333

answers:

2

I have an android application that I am supporting and after calling one of the activities numerous time, it throws a stackoverflowerror when trying to get the extras from the intent. Here is the the stack trace from when it crashes. Any ideas as to why after calling the activity at least 4 times the next time throws StackOverflowError when getting the extras from the intent?

The code used to build the intent is and contains String, String, boolean, Object:

Intent videoIntent = new Intent(this, VideoPlayer.class);
videoIntent.putExtra(AppNames.EXTRA_VIDEO_URI, uri);
videoIntent.putExtra(AppNames.EXTRA_VIDEO_TITLE, channel.getName());
videoIntent.putExtra(AppNames.EXTRA_VIDEO_MODE_RESUME, false);
videoIntent.putExtra(AppNames.EXTRA_MCD_CHANNEL, channel);
startActivity(videoIntent);  

and the code that is throwing the StackOverflowError is:
uri = getIntent().getStringExtra(AppNames.EXTRA_VIDEO_URI);

I/dalvikvm( 1719): Stack overflow, expanding (0x41048200 to 0x41048000)  
I/dalvikvm( 1719): Shrank stack (to 0x41048200, curFrame is 0x4104834c)  
D/AndroidRuntime( 1719): Shutting down VM  
W/dalvikvm( 1719): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)  
E/AndroidRuntime( 1719): Uncaught handler: thread main exiting due to uncaught exception  
E/AndroidRuntime( 1719): java.lang.StackOverflowError  
E/AndroidRuntime( 1719):  at java.lang.reflect.ReflectionAccessImpl.clone(ReflectionAccessImpl.java:38)  
E/AndroidRuntime( 1719):  at java.lang.Class.getDeclaredMethod(Class.java:765)  
E/AndroidRuntime( 1719):  at java.io.ObjectStreamClass.getPrivateReadObjectMethod(ObjectStreamClass.java:789)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1525)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1296)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:545)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1549)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.util.ArrayList.readObject(ArrayList.java:702)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invokeNative(Native Method)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invoke(Method.java:521)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1534)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1296)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:545)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1549)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.util.ArrayList.readObject(ArrayList.java:702)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invokeNative(Native Method)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invoke(Method.java:521)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1534)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1296)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:545)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1549)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2124)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:956)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2289)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2243)  
E/AndroidRuntime( 1719):  at java.util.ArrayList.readObject(ArrayList.java:702)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invokeNative(Native Method)  
E/AndroidRuntime( 1719):  at java.lang.reflect.Method.invoke(Method.java:521)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1534)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1455)  
E/AndroidRuntime( 1719):  at java.io.ObjectInputStream.readNew  
D/dalvikvm( 1719): GC freed 6315 objects / 501704 bytes in 154ms  
I/Process (   56): Sending signal. PID: 1719 SIG: 3  
I/dalvikvm( 1719): threadid=7: reacting to signal 3  
A: 

Your Object looks too complex. When you serialize an Object, its content must be serialized. If it contains other Objects, these must be de-serialized as well, etc.

Romain Guy
A: 

As far as I know getIntent().getStringExtra() returns a string not a URI.

Titan