Вызов Intent.getStringExtra () периодически вызывает StackOverflowError - PullRequest
2 голосов
/ 25 января 2010

У меня есть приложение для Android, которое я поддерживаю, и после неоднократного вызова одного из действий оно генерирует stackoverflowerror при попытке получить дополнения из намерения. Вот трассировка стека от того, когда он падает. Любые идеи относительно того, почему после вызова действия по крайней мере 4 раза в следующий раз выбрасывает StackOverflowError при получении дополнений из намерения?

Код, используемый для построения намерения, содержит и содержит 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);  

и код, который выдает ошибку StackOverflowError:
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  

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Насколько я знаю, getIntent().getStringExtra() возвращает строку, а не URI.

1 голос
/ 25 января 2010

Ваш объект выглядит слишком сложным. Когда вы сериализуете объект, его содержимое должно быть сериализовано. Если он содержит другие объекты, они также должны быть десериализованы и т. Д.

...