Apps-android-commons: Peer review NullPointerException on orientation change.

Created on 28 Mar 2019  路  14Comments  路  Source: commons-app/apps-android-commons

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

assigned bug

All 14 comments

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. :)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Opsylac picture Opsylac  路  3Comments

whym picture whym  路  3Comments

domdomegg picture domdomegg  路  3Comments

nicolas-raoul picture nicolas-raoul  路  4Comments

jidanni picture jidanni  路  3Comments