evrencoskun / TableView

TableView is a powerful Android library for displaying complex data structures and rendering tabular data composed of rows, columns and cells.
MIT License
3.14k stars 459 forks source link

NPE on activity destroyed while onRestoreInstanceState() #185

Open vicmns opened 5 years ago

vicmns commented 5 years ago

When the activity/fragment get destroyed and the onRestoreInstanceState() method is called for the TableView I'm getting the following error:

java.lang.NullPointerException: Attempt to read from field 'int com.evrencoskun.tableview.preference.Preferences.columnPosition' on a null object reference
        at com.evrencoskun.tableview.handler.PreferencesHandler.loadPreferences(PreferencesHandler.java:53)
        at com.evrencoskun.tableview.TableView.onRestoreInstanceState(TableView.java:752)

The easiest way to reproduce it is to run the DemoApp while the device has the option Don't keep Activities turn on in the Developer Options.

vicmns commented 5 years ago

Ok I found the issue... preferences was never read from the Parcel input on the SavedState class, so the SavedState method should look like this:

private SavedState(Parcel in) {
        super(in);
        preferences = in.readParcelable(Preferences.class.getClassLoader());
    }

I'll create a MR for this fix

Equin commented 5 years ago

Still have this issue, with same steps to reproduce.

02-18 17:51:03.052 14769-14769/scoreapp.testtask.com E/AndroidRuntime: FATAL EXCEPTION: main Process: scoreapp.testtask.com, PID: 14769 java.lang.RuntimeException: Unable to start activity ComponentInfo{scoreapp.testtask.com/scoreapp.testtask.com.presentation.view.activity.ScoreTableActivity}: java.lang.NullPointerException: Attempt to read from field 'int com.evrencoskun.tableview.preference.Preferences.columnPosition' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2439) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2499) at android.app.ActivityThread.access$900(ActivityThread.java:166) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5487) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:765) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655) Caused by: java.lang.NullPointerException: Attempt to read from field 'int com.evrencoskun.tableview.preference.Preferences.columnPosition' on a null object reference at com.evrencoskun.tableview.handler.PreferencesHandler.loadPreferences(PreferencesHandler.java:53) at com.evrencoskun.tableview.TableView.onRestoreInstanceState(TableView.java:742) at android.view.View.dispatchRestoreInstanceState(View.java:14781) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3127) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3133) at android.view.View.restoreHierarchyState(View.java:14759) at androidx.fragment.app.Fragment.restoreViewState(Fragment.java:494) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1486) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269) at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229) at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201) at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620) at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178) at scoreapp.testtask.com.presentation.view.activity.BaseActivity.onStart(BaseActivity.java:53) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1238) at android.app.Activity.performStart(Activity.java:6595) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2402) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2499)  at android.app.ActivityThread.access$900(ActivityThread.java:166)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1360)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5487)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:765)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:655) 

damonbakker commented 5 years ago

I am having the same issue right now. Not sure how to solve this.

java.lang.NullPointerException: Attempt to read from field 'int com.evrencoskun.tableview.preference.Preferences.columnPosition' on a null object reference

Only happens when it is being restored from a savedinstance.