Nonononoki / Hendroid

Doujinshi Android App
https://f-droid.org/de/packages/org.nonononoki.hendroid/
Apache License 2.0
135 stars 10 forks source link

Clicking Errors tab crashes app consistently #48

Open Drakonas opened 2 years ago

Drakonas commented 2 years ago

Hendroid Version: 1.15.14 (187)

Device/Android Version: Samsung A7/SM-T500 Android 11

Issue details / Repro steps: Clicking the "errors" tab in the queue menu immediately crashes Hendroid, even after a complete tablet restart.

Steps taken: Added a bunch of exhentai (reached a total of almost 300) in a period of a couple days, mostly the last day. Eventually exhentai temporarily IP banned for 1 hour due to "excessive page loads". Waited 1 hour, then to be safe enabled Mullvad VPN to a different IP. Moved all entries from the error tab to queue (error tab still loaded fine at this time). I left to do things, later to find the queue empty and 18 marked next to "errors". Clicking on the "errors" tab from this point forward produces the issue, even when turning off the VPN, clearing app caches with the in-app function, and restarting the tablet.

Stack trace / LogCat:

latest-crash log : begin
Hentoid ver: 1.15.14 (187)
API: 30
Device: SM-T500
Start : 2021-11-28T07:24:41.979Z
End : 2021-11-28T07:24:41.979Z (00:00)
-----
Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.isEmpty()' on a null object reference
    at me.devsaki.hentoid.database.domains.ImageFile.getUsableUri(ImageFile.java:302)
    at me.devsaki.hentoid.viewholders.ContentItem$ContentViewHolder.attachCover(ContentItem.java:391)
    at me.devsaki.hentoid.viewholders.ContentItem$ContentViewHolder.bindView(ContentItem.java:345)
    at me.devsaki.hentoid.viewholders.ContentItem$ContentViewHolder.bindView(ContentItem.java:216)
    at com.mikepenz.fastadapter.listeners.OnBindViewHolderListenerImpl.onBindViewHolder(OnBindViewHolderListenerImpl.kt:22)
    at com.mikepenz.fastadapter.FastAdapter.onBindViewHolder(FastAdapter.kt:397)
    at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
    at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330)
    at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1631)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
    at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
    at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
    at android.view.View.layout(View.java:24481)
    at android.view.ViewGroup.layout(ViewGroup.java:7383)
    at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873)
    at android.view.View.layout(View.java:24481)
    at android.view.ViewGroup.layout(ViewGroup.java:7383)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
    at android.view.View.layout(View.java:24481)
    at android.view.ViewGroup.layout(ViewGroup.java:7383)
    at androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(RecyclerView.java:9878)
    at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1689)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
    at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1395)
    at androidx.recyclerview.widget.LinearLayoutManager.scrollHorizontallyBy(LinearLayoutManager.java:1124)
    at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:1969)
    at androidx.recyclerview.widget.RecyclerView$SmoothScroller.onAnimation(RecyclerView.java:12316)
    at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5564)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
    at android.view.Choreographer.doCallbacks(Choreographer.java:809)
    at android.view.Choreographer.doFrame(Choreographer.java:740)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:247)
    at android.app.ActivityThread.main(ActivityThread.java:8656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

latest-crash log : end

20211128_030020

Nonononoki commented 2 years ago

Thanks for the report! Have you tried the upstream app? (https://github.com/avluis/Hentoid) If the error occurs there as well then you should report it there so even more users can benefit from it.

Drakonas commented 2 years ago

The issue is I'm not sure if I can easily reproduce the issue.

Question: Is it possible to see what the 18 entries are by opening a text file or sql database somewhere? Where is the list of entries located? I can erase the program data but I really don't want to miss what those 18 errored downloads are.