CMPUT301W14T08/GeoChan

Editing preferences from ThreadViewFragment causes crash.

Closed this issue · 6 comments

Trying to edit preferences from the ThreadViewFragment causes a StackOverflowError.
Logcat dump:

03-25 15:16:25.643: E/AndroidRuntime(2139): FATAL EXCEPTION: main
03-25 15:16:25.643: E/AndroidRuntime(2139): java.lang.StackOverflowError
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:92)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.DataOutputStream.writeShort(DataOutputStream.java:192)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeFieldDescriptors(ObjectOutputStream.java:858)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeNewClassDesc(ObjectOutputStream.java:1282)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeClassDescriptor(ObjectOutputStream.java:1299)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:790)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1369)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
03-25 15:16:25.643: E/AndroidRuntime(2139): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeSerializable(Parcel.java:1274)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeValue(Parcel.java:1233)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:413)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeTypedList(Parcel.java:1017)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:419)
03-25 15:16:25.643: E/AndroidRuntime(2139): at android.os.Parcel.writeParcelable(Parcel.java:1254)
03-25 15:16:25.643: E/AndroidRuntime(2139): at ca.ualberta.cmput301w14t08.geochan.models.Comment.writeToParcel(Comment.java:418)
03-25 15:16:25.643: E/AndroidRuntime(2139): at andro

Why don't we just remove settings from threadView Fragment?

That's one possible solution, but it decreases user-friendliness. What if the user if browsing a thread then wants to change their username so they can edit a comment of their's?

I agree, I think preferences should be available app-wide. The other solution is to change the editing to work off of android ID instead of hash (and store android ID instead of hash in the model/on elasticsearch and just do the hash calculation on-device for display purposes only)

This bug also seems to be related to all sorts of other crashes we've been having especially #57

Yes, it seems to be related to parcelable comments. Which is odd, because I don't understand why it runs at all at that point. There seems to be an infinite recursion happening there, probably related to writing children of a comment to a parcel.

fixed by changing parcelable constructor of the comment.