keithzg / paulmillerisoffline

Android App; countdown to the end of Verge editor Paul Miller's self-imposed exile from the internet.
Other
2 stars 1 forks source link

App crashes when rotated #2

Closed keithzg closed 11 years ago

keithzg commented 11 years ago

At least on my Nexus 7, app crashes when rotated into landscape.

keithzg commented 11 years ago

Interestingly, if it's opened in landscape, it's fine, but it then crashes when rotated into portrait.

keithzg commented 11 years ago

Perhaps using http://developer.android.com/reference/android/app/Application.html would alleviate this? My usage of countdowntimer (and how it directly changes the text each tick) might complicate this, however. Hmm.

keithzg commented 11 years ago

A helpful co-worker of mine has chimed in, suspecting that the MainActivity.this.* calls are the culprit; as soon as the app is rotated, the views are destroyed and recreated, but each MainActivity.this.* is still referencing what is now a no longer existing instance. Hence, Kaboom. Hmm x2 . . .

keithzg commented 11 years ago

Nope, it isn't the MainActivity.this.* calls, as taking them out still has crashes.

            03-25 16:38:57.882: E/AndroidRuntime(11652): java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.keithzg.paulmiller.is.offline/ca.keithzg.paulmiller.is.offline.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment ca.keithzg.paulmiller.is.offline.MainActivity$MyFragmentPagerAdapter$Fragment1: make sure class name exists, is public, and has an empty constructor that is public
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread.access$700(ActivityThread.java:141)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.os.Handler.dispatchMessage(Handler.java:99)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.os.Looper.loop(Looper.java:137)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread.main(ActivityThread.java:5041)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at java.lang.reflect.Method.invokeNative(Native Method)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at java.lang.reflect.Method.invoke(Method.java:511)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at dalvik.system.NativeStart.main(Native Method)
            03-25 16:38:57.882: E/AndroidRuntime(11652): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment ca.keithzg.paulmiller.is.offline.MainActivity$MyFragmentPagerAdapter$Fragment1: make sure class name exists, is public, and has an empty constructor that is public
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.support.v4.app.Fragment.instantiate(Fragment.java:405)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1767)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:208)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at ca.keithzg.paulmiller.is.offline.MainActivity.onCreate(MainActivity.java:47)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.Activity.performCreate(Activity.java:5104)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    ... 12 more
            03-25 16:38:57.882: E/AndroidRuntime(11652): Caused by: java.lang.InstantiationException: can't instantiate class ca.keithzg.paulmiller.is.offline.MainActivity$MyFragmentPagerAdapter$Fragment1; no empty constructor
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at java.lang.Class.newInstanceImpl(Native Method)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at java.lang.Class.newInstance(Class.java:1319)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    at android.support.v4.app.Fragment.instantiate(Fragment.java:394)
            03-25 16:38:57.882: E/AndroidRuntime(11652):    ... 19 more
amlcurran commented 11 years ago

Ah I know this bug - totally my fault. When a fragment is recreated it tries to use a call like new RandomFragment(), if there isn't one explicitly defined the app will crash. I'm halfway through an update, I'll roll the fix into that!

keithzg commented 11 years ago

Seems fixed now; excellent.