Summary:
It crashes on orientation change on mis-category question.
System logs:
--------- beginning of crash
2019-03-28 15:35:31.243 1986-1986/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: fr.free.nrw.commons.beta, PID: 1986
java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.free.nrw.commons.beta/fr.free.nrw.commons.review.ReviewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String fr.free.nrw.commons.media.model.MwQueryPage$Revision.getUser()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4754)
at android.app.ActivityThread.-wrap18(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1599)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String fr.free.nrw.commons.media.model.MwQueryPage$Revision.getUser()' on a null object reference
at fr.free.nrw.commons.review.ReviewImageFragment.onCreateView(ReviewImageFragment.java:103)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2440)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:885)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1229)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1295)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2605)
at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2565)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:245)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:525)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:179)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
at android.app.Activity.performStart(Activity.java:6992)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)聽
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4754)聽
at android.app.ActivityThread.-wrap18(Unknown Source:0)聽
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1599)聽
at android.os.Handler.dispatchMessage(Handler.java:105)聽
at android.os.Looper.loop(Looper.java:164)聽
at android.app.ActivityThread.main(ActivityThread.java:6541)聽
at java.lang.reflect.Method.invoke(Native Method)聽
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)聽
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)聽
Device and Android version:
API 26
Commons app version:
betaDebug, current master
Related with #2698
Hey, I am working on this
It would be nice to have espresso tests for emulating orientation change in all activities.
@maskaravivek Shall I create a separate Issue for this ?
@maskaravivek Shall I create a separate Issue for this ?
Yes, that would be great. :)
A similar crash happens when we reach to category question before image is loaded:
2019-04-02 13:12:08.184 22275-22275/fr.free.nrw.commons.beta E/ACRA: ACRA caught a NullPointerException for fr.free.nrw.commons.beta
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.wikipedia.dataclient.mwapi.MwQueryPage$Revision.getUser()' on a null object reference
at fr.free.nrw.commons.review.ReviewImageFragment.onCreateView(ReviewImageFragment.java:104)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2440)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:885)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1229)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1295)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:686)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2057)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1847)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1802)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1679)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:536)
at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:170)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:669)
at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631)
at androidx.viewpager.widget.ViewPager.setCurrentItem(ViewPager.java:612)
at fr.free.nrw.commons.review.ReviewActivity.swipeToNext(ReviewActivity.java:177)
at fr.free.nrw.commons.review.ReviewImageFragment.lambda$onCreateView$4(ReviewImageFragment.java:121)
at fr.free.nrw.commons.review.-$$Lambda$ReviewImageFragment$RD-dpoqsCIyKXGRlXiDP6PYBQ8U.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
This PR is available to work on
Hi @neslihanturan can I work on this issue?
@nfatma Yes, it is yours now! Please let us know about your progress every few days. Thanks :-)
Thanks @nicolas-raoul :)
I'll keep updating about my progresss.
@nfatma Are you still working on this, Please let us know if you have any updates ?
@ashishkumar468 Yes I am working on this. I am thinking to solve this issue by using viewModel.
Hi @nfatma, In the current state the app is not using ViewModel's anywhere, as far as I could infer from the logs (and I may be wrong), the problem is with the lifecycle management of one of the member variables, can we not solve it using the scopes in dagger or something like it?
hi @ashishkumar468 , yes the problem is with the life cycle management. We can solve the issue by using the scopes in dagger as you suggested or by using onSaveInstanceState() also.
I thought it would be nice if we can delegate work of UI controller with the help of ViewModel. As the app is not using it anywhere, we can add it later for more efficiency. :)