Kiwix-android: App crashes on clicking Clear All Notes

Created on 21 Jul 2019  路  14Comments  路  Source: kiwix/kiwix-android

Describe the bug

On a fresh installation when I go to the menu and select Clear All Notes the app crashes.

Steps to reproduce the behavior:

  1. Menu -> Clear All Notes

Environment

  • Version of Kiwix Android : develop branch
  • Device : Emulator Pixel 2
  • OS version : API 29

Logs

2019-07-21 20:27:09.569 22494-22494/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.kiwix.kiwixmobile, PID: 22494
    java.lang.RuntimeException: Unable to resume activity {org.kiwix.kiwixmobile/org.kiwix.kiwixmobile.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null object reference
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4190)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4222)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null object reference
        at org.kiwix.kiwixmobile.main.AddNoteDialog.getTextAfterLastSlashWithoutExtension(AddNoteDialog.java:185)
        at org.kiwix.kiwixmobile.main.AddNoteDialog.getZimNoteDirectoryName(AddNoteDialog.java:164)
        at org.kiwix.kiwixmobile.main.AddNoteDialog.onCreate(AddNoteDialog.java:95)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2414)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at androidx.fragment.app.FragmentController.execPendingActions(FragmentController.java:391)
        at androidx.fragment.app.FragmentActivity.onResume(FragmentActivity.java:517)
        at org.kiwix.kiwixmobile.main.MainActivity.onResume(MainActivity.java:1535)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1446)
        at android.app.Activity.performResume(Activity.java:7920)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4180)
bug

All 14 comments

@Aditya-Sood It would be great if you can remove all the lint warnings from this file. At least the code we're writing now should be clean so that we can clean codebase bit by bit. You just have to go to Analyze -> Inspect Code...

@abdulwd the app doesn't crash on my device on the re-installed version, gives the "No notes found for deletion" toast as it should. Can you check on your device as well? (could be a discrepancy between working on emulator & a device)

Meanwhile I'll try and work out what went wrong lower in the stack trace

The next time I click Clear All Notes I get this toast. You just have to add a null check to prevent this crash.

Thing is, clearing notes does not open 'Add note dialog'. I'm trying to figure out why it's being opened in the first place.

Thing is, clearing notes does not open 'Add note dialog'. I'm trying to figure out why it's being opened in the first place.

Still trying to work out why this happened, but #1305 fixes the crash

@Aditya-Sood the app still crashes on my device

@geekRishabhjain can you share the logs?

@Aditya-Sood
Here is the log:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.kiwix.kiwixmobile, PID: 24655
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null object reference
at org.kiwix.kiwixmobile.main.AddNoteDialog.getTextAfterLastSlashWithoutExtension(AddNoteDialog.java:185)
at org.kiwix.kiwixmobile.main.AddNoteDialog.getZimNoteDirectoryName(AddNoteDialog.java:164)
at org.kiwix.kiwixmobile.main.AddNoteDialog.onCreate(AddNoteDialog.java:95)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2414)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7156)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

@geekRishabhjain you can confirm this is using the latest code on develop branch?

I suspect not as AddNoteDialog line 185 for me is

    }

Develop is what we use as our branch for development.
Master is what we (will) use for releases of the app.
See our CONTRIBUTING

@macgills yeah. My mistake, absolutely sorry. I thought diving directly into the code is a good idea, but I think I need to read the documentation.

The enthusiasm is appreciated and thank you for reporting! Hope to see contributions from you

@geekRishabhjain does the problem persist for you after using develop?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

RohanBh picture RohanBh  路  5Comments

chstdu picture chstdu  路  6Comments

siddharth2010 picture siddharth2010  路  4Comments

brijeshshah13 picture brijeshshah13  路  4Comments

abdulwd picture abdulwd  路  4Comments