Closed murraycu closed 9 years ago
Maybe this nasty workaround code will avoid this crash: https://github.com/murraycu/android-galaxyzoo/commit/9c491b3a249b7af2e4bad5ca397ff5f89e5d37db
This seems to be fixed. At least I haven't seen the crash for a while either on my own devices or via Play store crash reports.
This is apparently not fixed. Here is much the same stacktrace from a recent crash report on Android 4.4 on an Xperia M2 Aqua, with version 1.35
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.void checkStateLoss()(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.void throwException(java.lang.RuntimeException)(Unknown Source)
android.support.v4.app.FragmentTransaction beginTransaction()
void putFragment(android.os.Bundle,java.lang.String,android.support.v4.app.Fragment)
android.support.v4.app.Fragment getFragment(android.os.Bundle,java.lang.String)
void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])
android.view.animation.Animation makeOpenCloseAnimation(android.content.Context,float,float,float,float)
android.view.animation.Animation makeFadeAnimation(android.content.Context,float,float)
android.view.animation.Animation loadAnimation(android.support.v4.app.Fragment,int,boolean,int)
void performPendingDeferredStart(android.support.v4.app.Fragment)
void moveToState(android.support.v4.app.Fragment,int,int,int,boolean)
void moveToState(int,boolean)
void moveToState(int,int,int,boolean)
void addFragment(android.support.v4.app.Fragment,boolean)
void removeFragment(android.support.v4.app.Fragment,int,int)
android.support.v4.app.Fragment findFragmentById(int)
android.support.v4.app.Fragment findFragmentByTag(java.lang.String)
void enqueueAction(java.lang.Runnable,boolean)
int allocBackStackIndex(android.support.v4.app.BackStackRecord)
void setBackStackIndex(int,android.support.v4.app.BackStackRecord)
boolean popBackStackState(android.os.Handler,java.lang.String,int,int)
void restoreAllState(android.os.Parcelable,java.util.ArrayList)
void attachActivity(android.support.v4.app.FragmentActivity,android.support.v4.app.FragmentContainer,android.support.v4.app.Fragment)
void dispatchConfigurationChanged(android.content.res.Configuration)
boolean dispatchCreateOptionsMenu(android.view.Menu,android.view.MenuInflater)
boolean dispatchPrepareOptionsMenu(android.view.Menu)
boolean dispatchOptionsItemSelected(android.view.MenuItem)
at android.support.v4.app.BackStackRecord.void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])(Unknown Source)
void dump(java.lang.String,java.io.PrintWriter,boolean)
void addOp(android.support.v4.app.BackStackRecord$Op)
android.support.v4.app.FragmentTransaction add(int,android.support.v4.app.Fragment,java.lang.String)
void doAddOp(int,android.support.v4.app.Fragment,java.lang.String,int)
android.support.v4.app.FragmentTransaction replace(int,android.support.v4.app.Fragment)
android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment)
void bumpBackStackNesting(int)
int commit()
int commitInternal(boolean)
void setFirstOut(android.util.SparseArray,android.support.v4.app.Fragment)
void calculateBackFragments(android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState popFromBackStack(boolean,android.support.v4.app.BackStackRecord$TransitionState,android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState beginTransition(android.util.SparseArray,android.util.SparseArray,boolean)
java.lang.Object getEnterTransition(android.support.v4.app.Fragment,boolean)
java.lang.Object getSharedElementTransition(android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean)
java.lang.Object captureExitingViews(java.lang.Object,android.support.v4.app.Fragment,java.util.ArrayList,android.support.v4.util.ArrayMap)
android.support.v4.util.ArrayMap remapSharedElements(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,boolean)
boolean configureTransitions(int,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.util.SparseArray,android.util.SparseArray)
void prepareSharedElementTransition(android.support.v4.app.BackStackRecord$TransitionState,android.view.View,java.lang.Object,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,java.util.ArrayList)
void callSharedElementEnd(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void setEpicenterIn(android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
android.support.v4.util.ArrayMap mapSharedElementsIn(android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
android.support.v4.util.ArrayMap remapNames(java.util.ArrayList,java.util.ArrayList,android.support.v4.util.ArrayMap)
void excludeHiddenFragmentsAfterEnter(android.view.View,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void excludeHiddenFragments(android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void setNameOverride(android.support.v4.util.ArrayMap,java.lang.String,java.lang.String)
void setNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,java.util.ArrayList,java.util.ArrayList)
void setBackNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.util.ArrayMap,boolean)
android.support.v4.util.ArrayMap access$000(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
void access$100(android.support.v4.app.BackStackRecord,android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
void access$200(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void access$300(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
at android.support.v4.app.BackStackRecord.void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])(Unknown Source)
void dump(java.lang.String,java.io.PrintWriter,boolean)
void addOp(android.support.v4.app.BackStackRecord$Op)
android.support.v4.app.FragmentTransaction add(int,android.support.v4.app.Fragment,java.lang.String)
void doAddOp(int,android.support.v4.app.Fragment,java.lang.String,int)
android.support.v4.app.FragmentTransaction replace(int,android.support.v4.app.Fragment)
android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment)
void bumpBackStackNesting(int)
int commit()
int commitInternal(boolean)
void setFirstOut(android.util.SparseArray,android.support.v4.app.Fragment)
void calculateBackFragments(android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState popFromBackStack(boolean,android.support.v4.app.BackStackRecord$TransitionState,android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState beginTransition(android.util.SparseArray,android.util.SparseArray,boolean)
java.lang.Object getEnterTransition(android.support.v4.app.Fragment,boolean)
java.lang.Object getSharedElementTransition(android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean)
java.lang.Object captureExitingViews(java.lang.Object,android.support.v4.app.Fragment,java.util.ArrayList,android.support.v4.util.ArrayMap)
android.support.v4.util.ArrayMap remapSharedElements(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,boolean)
boolean configureTransitions(int,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.util.SparseArray,android.util.SparseArray)
void prepareSharedElementTransition(android.support.v4.app.BackStackRecord$TransitionState,android.view.View,java.lang.Object,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,java.util.ArrayList)
void callSharedElementEnd(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void setEpicenterIn(android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
android.support.v4.util.ArrayMap mapSharedElementsIn(android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
android.support.v4.util.ArrayMap remapNames(java.util.ArrayList,java.util.ArrayList,android.support.v4.util.ArrayMap)
void excludeHiddenFragmentsAfterEnter(android.view.View,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void excludeHiddenFragments(android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void setNameOverride(android.support.v4.util.ArrayMap,java.lang.String,java.lang.String)
void setNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,java.util.ArrayList,java.util.ArrayList)
void setBackNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.util.ArrayMap,boolean)
android.support.v4.util.ArrayMap access$000(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
void access$100(android.support.v4.app.BackStackRecord,android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
void access$200(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void access$300(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
at com.murrayc.galaxyzoo.app.ClassifyFragment.void showChildFragments(boolean)(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyFragment.void showLoadingInProgress(boolean)(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyFragment.void onAttach(android.app.Activity)(Unknown Source)
android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)
void onCreateOptionsMenu(android.view.Menu,android.view.MenuInflater)
android.support.v4.content.Loader onCreateLoader(int,android.os.Bundle)
void onLoadFinished(android.support.v4.content.Loader,android.database.Cursor)
void onLoaderReset(android.support.v4.content.Loader)
void onLoadFinished(android.support.v4.content.Loader,java.lang.Object)
at android.support.v4.app.LoaderManagerImpl.android.support.v4.app.LoaderManagerImpl$LoaderInfo createLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)(Unknown Source)
void doStop()
at android.support.v4.app.LoaderManagerImpl.android.support.v4.app.LoaderManagerImpl$LoaderInfo createAndInstallLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)(Unknown Source)
void doRetain()
at android.support.v4.app.LoaderManagerImpl.android.support.v4.content.Loader restartLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)(Unknown Source)
void doStart()
at com.murrayc.galaxyzoo.app.ClassifyFragment.void update()(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyActivity.void startNextClassification()(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyActivity.void onClassificationFinished()(Unknown Source)
at com.murrayc.galaxyzoo.app.QuestionFragment$SaveClassificationTask.java.lang.Void doInBackground(java.lang.Void[])(Unknown Source)
void onPostExecute(java.lang.Void)
at com.murrayc.galaxyzoo.app.QuestionFragment$SaveClassificationTask.void onPostExecute(java.lang.Object)(Unknown Source)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5212)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Actually, this recent stacktrace doesn't involve AlertDialog.show().
This is hopefully fixed by this (reverting) commit: https://github.com/murraycu/android-galaxyzoo/commit/7800631dba3c357c5bc6e2817098a229bf430e4a
Here's another stacktrace from version 1.35 which looks like a duplicate, and was presumably fixed by this.
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.void checkStateLoss()(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.void throwException(java.lang.RuntimeException)(Unknown Source)
android.support.v4.app.FragmentTransaction beginTransaction()
void putFragment(android.os.Bundle,java.lang.String,android.support.v4.app.Fragment)
android.support.v4.app.Fragment getFragment(android.os.Bundle,java.lang.String)
void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])
android.view.animation.Animation makeOpenCloseAnimation(android.content.Context,float,float,float,float)
android.view.animation.Animation makeFadeAnimation(android.content.Context,float,float)
android.view.animation.Animation loadAnimation(android.support.v4.app.Fragment,int,boolean,int)
void performPendingDeferredStart(android.support.v4.app.Fragment)
void moveToState(android.support.v4.app.Fragment,int,int,int,boolean)
void moveToState(int,boolean)
void moveToState(int,int,int,boolean)
void addFragment(android.support.v4.app.Fragment,boolean)
void removeFragment(android.support.v4.app.Fragment,int,int)
android.support.v4.app.Fragment findFragmentById(int)
android.support.v4.app.Fragment findFragmentByTag(java.lang.String)
void enqueueAction(java.lang.Runnable,boolean)
int allocBackStackIndex(android.support.v4.app.BackStackRecord)
void setBackStackIndex(int,android.support.v4.app.BackStackRecord)
boolean popBackStackState(android.os.Handler,java.lang.String,int,int)
void restoreAllState(android.os.Parcelable,java.util.ArrayList)
void attachActivity(android.support.v4.app.FragmentActivity,android.support.v4.app.FragmentContainer,android.support.v4.app.Fragment)
void dispatchConfigurationChanged(android.content.res.Configuration)
boolean dispatchCreateOptionsMenu(android.view.Menu,android.view.MenuInflater)
boolean dispatchPrepareOptionsMenu(android.view.Menu)
boolean dispatchOptionsItemSelected(android.view.MenuItem)
at android.support.v4.app.BackStackRecord.void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])(Unknown Source)
void dump(java.lang.String,java.io.PrintWriter,boolean)
void addOp(android.support.v4.app.BackStackRecord$Op)
android.support.v4.app.FragmentTransaction add(int,android.support.v4.app.Fragment,java.lang.String)
void doAddOp(int,android.support.v4.app.Fragment,java.lang.String,int)
android.support.v4.app.FragmentTransaction replace(int,android.support.v4.app.Fragment)
android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment)
void bumpBackStackNesting(int)
int commit()
int commitInternal(boolean)
void setFirstOut(android.util.SparseArray,android.support.v4.app.Fragment)
void calculateBackFragments(android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState popFromBackStack(boolean,android.support.v4.app.BackStackRecord$TransitionState,android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState beginTransition(android.util.SparseArray,android.util.SparseArray,boolean)
java.lang.Object getEnterTransition(android.support.v4.app.Fragment,boolean)
java.lang.Object getSharedElementTransition(android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean)
java.lang.Object captureExitingViews(java.lang.Object,android.support.v4.app.Fragment,java.util.ArrayList,android.support.v4.util.ArrayMap)
android.support.v4.util.ArrayMap remapSharedElements(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,boolean)
boolean configureTransitions(int,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.util.SparseArray,android.util.SparseArray)
void prepareSharedElementTransition(android.support.v4.app.BackStackRecord$TransitionState,android.view.View,java.lang.Object,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,java.util.ArrayList)
void callSharedElementEnd(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void setEpicenterIn(android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
android.support.v4.util.ArrayMap mapSharedElementsIn(android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
android.support.v4.util.ArrayMap remapNames(java.util.ArrayList,java.util.ArrayList,android.support.v4.util.ArrayMap)
void excludeHiddenFragmentsAfterEnter(android.view.View,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void excludeHiddenFragments(android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void setNameOverride(android.support.v4.util.ArrayMap,java.lang.String,java.lang.String)
void setNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,java.util.ArrayList,java.util.ArrayList)
void setBackNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.util.ArrayMap,boolean)
android.support.v4.util.ArrayMap access$000(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
void access$100(android.support.v4.app.BackStackRecord,android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
void access$200(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void access$300(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
at android.support.v4.app.BackStackRecord.void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])(Unknown Source)
void dump(java.lang.String,java.io.PrintWriter,boolean)
void addOp(android.support.v4.app.BackStackRecord$Op)
android.support.v4.app.FragmentTransaction add(int,android.support.v4.app.Fragment,java.lang.String)
void doAddOp(int,android.support.v4.app.Fragment,java.lang.String,int)
android.support.v4.app.FragmentTransaction replace(int,android.support.v4.app.Fragment)
android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment)
void bumpBackStackNesting(int)
int commit()
int commitInternal(boolean)
void setFirstOut(android.util.SparseArray,android.support.v4.app.Fragment)
void calculateBackFragments(android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState popFromBackStack(boolean,android.support.v4.app.BackStackRecord$TransitionState,android.util.SparseArray,android.util.SparseArray)
android.support.v4.app.BackStackRecord$TransitionState beginTransition(android.util.SparseArray,android.util.SparseArray,boolean)
java.lang.Object getEnterTransition(android.support.v4.app.Fragment,boolean)
java.lang.Object getSharedElementTransition(android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean)
java.lang.Object captureExitingViews(java.lang.Object,android.support.v4.app.Fragment,java.util.ArrayList,android.support.v4.util.ArrayMap)
android.support.v4.util.ArrayMap remapSharedElements(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,boolean)
boolean configureTransitions(int,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.util.SparseArray,android.util.SparseArray)
void prepareSharedElementTransition(android.support.v4.app.BackStackRecord$TransitionState,android.view.View,java.lang.Object,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,java.util.ArrayList)
void callSharedElementEnd(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void setEpicenterIn(android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
android.support.v4.util.ArrayMap mapSharedElementsIn(android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
android.support.v4.util.ArrayMap remapNames(java.util.ArrayList,java.util.ArrayList,android.support.v4.util.ArrayMap)
void excludeHiddenFragmentsAfterEnter(android.view.View,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void excludeHiddenFragments(android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
void setNameOverride(android.support.v4.util.ArrayMap,java.lang.String,java.lang.String)
void setNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,java.util.ArrayList,java.util.ArrayList)
void setBackNameOverrides(android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.util.ArrayMap,boolean)
android.support.v4.util.ArrayMap access$000(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,boolean,android.support.v4.app.Fragment)
void access$100(android.support.v4.app.BackStackRecord,android.support.v4.util.ArrayMap,android.support.v4.app.BackStackRecord$TransitionState)
void access$200(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,android.support.v4.app.Fragment,android.support.v4.app.Fragment,boolean,android.support.v4.util.ArrayMap)
void access$300(android.support.v4.app.BackStackRecord,android.support.v4.app.BackStackRecord$TransitionState,int,java.lang.Object)
at com.murrayc.galaxyzoo.app.ClassifyFragment.void showChildFragments(boolean)(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyFragment.void showLoadingInProgress(boolean)(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyFragment.void onAttach(android.app.Activity)(Unknown Source)
android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle)
void onCreateOptionsMenu(android.view.Menu,android.view.MenuInflater)
android.support.v4.content.Loader onCreateLoader(int,android.os.Bundle)
void onLoadFinished(android.support.v4.content.Loader,android.database.Cursor)
void onLoaderReset(android.support.v4.content.Loader)
void onLoadFinished(android.support.v4.content.Loader,java.lang.Object)
at android.support.v4.app.LoaderManagerImpl.android.support.v4.app.LoaderManagerImpl$LoaderInfo createLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)(Unknown Source)
void doStop()
at android.support.v4.app.LoaderManagerImpl.android.support.v4.app.LoaderManagerImpl$LoaderInfo createAndInstallLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)(Unknown Source)
void doRetain()
at android.support.v4.app.LoaderManagerImpl.android.support.v4.content.Loader restartLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)(Unknown Source)
void doStart()
at com.murrayc.galaxyzoo.app.ClassifyFragment.void update()(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyActivity.void startNextClassification()(Unknown Source)
at com.murrayc.galaxyzoo.app.ClassifyActivity.void onClassificationFinished()(Unknown Source)
at com.murrayc.galaxyzoo.app.QuestionFragment$SaveClassificationTask.java.lang.Void doInBackground(java.lang.Void[])(Unknown Source)
void onPostExecute(java.lang.Void)
at com.murrayc.galaxyzoo.app.QuestionFragment$SaveClassificationTask.void onPostExecute(java.lang.Object)(Unknown Source)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
I, and at least one other user, have seen this crash. It might be happening when ClassifyFragment is trying to show the AlertDialog about generic network problems, via its warnAboutNetworkProblemWithRetry() method.
This is part of the stacktrace seems to be relevant:
The complete deobfuscated/retraced stacktrace looks like this: