Matisse: 打开相册,点击图片打开图片详情,按home键返回桌面,过一段时间后重新进入,崩溃

Created on 3 Jul 2018  ·  9Comments  ·  Source: zhihu/Matisse

java.lang.RuntimeException: Unable to resume activity {com.huodao.hdphone/com.zhihu.matisse.internal.ui.AlbumPreviewActivity}: android.database.StaleDataException: Attempted to access a cursor after it has been closed.
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3542)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3582)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1610)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6243)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
Caused by: android.database.StaleDataException: Attempted to access a cursor after it has been closed.
at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:63)
at android.database.BulkCursorToCursorAdaptor.getCount(BulkCursorToCursorAdaptor.java:69)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219)
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:268)
at android.database.CursorWrapper.moveToNext(CursorWrapper.java:202)
at com.zhihu.matisse.internal.ui.AlbumPreviewActivity.onAlbumMediaLoad(AlbumPreviewActivity.java:71)
at com.zhihu.matisse.internal.model.AlbumMediaCollection.onLoadFinished(AlbumMediaCollection.java:64)
at com.zhihu.matisse.internal.model.AlbumMediaCollection.onLoadFinished(AlbumMediaCollection.java:33)
at android.support.v4.app.LoaderManagerImpl$LoaderObserver.onChanged(LoaderManagerImpl.java:248)
at android.arch.lifecycle.LiveData.considerNotify(LiveData.java:109)
at android.arch.lifecycle.LiveData.dispatchingValue(LiveData.java:126)
at android.arch.lifecycle.LiveData.setValue(LiveData.java:282)
at android.arch.lifecycle.MutableLiveData.setValue(MutableLiveData.java:33)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.setValue(LoaderManagerImpl.java:188)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManagerImpl.java:173)
at android.support.v4.content.Loader.deliverResult(Loader.java:130)
at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:107)
at android.support.v4.content.CursorLoader.onStartLoading(CursorLoader.java:153)
at android.support.v4.content.Loader.startLoading(Loader.java:283)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onActive(LoaderManagerImpl.java:76)
at android.arch.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:410)
at android.arch.lifecycle.LiveData$LifecycleBoundObserver.onStateChanged(LiveData.java:368)
at android.arch.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at android.arch.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:292)
at android.arch.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:332)
at android.arch.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:137)
at android.arch.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:123)
at android.arch.lifecycle.ReportFragment.dispatch(ReportFragment.java:121)
at android.arch.lifecycle.ReportFragment.onStart(ReportFragment.java:81)
at android.app.Fragment.performStart(Fragment.java:2378)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1179)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1161)
at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:2052)
at android.app.FragmentController.dispatchStart(FragmentController.java:187)
at android.app.Activity.performStart(Activity.java:6779)
at android.app.Activity.performRestart(Activity.java:6847)
07-03 07:29:11.624 13779-13779/com.huodao.hdphone E/AndroidRuntime: at android.app.Activity.performResume(Activity.java:6852)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3513)

bug

Most helpful comment

For those who are as good as I am with chinese, the solution is to use 0.5.1-beta1.

(Hope this will help somebody)

All 9 comments

是什么手机呢?我这边没能复现呀。

魅族 Pro6 、红米 Redmi Note 3 、华为 Mate 8等

在AlbumPreviewActivity的onAlbumMediaLoad方法里的cursor参数在使用后被关闭了,在我重新进入,回调onresume 的时候重新回调onAlbumMediaLoad方法,由于cursor已被close,导致在while循环中调用cursor.moveToNext()时崩溃,是否可以在cursor.moveToNext()调用前判断该cursor是否关闭,然后进行相对应的处理。

遇到了,老兄解决了没?三星s7 华为麦芒4 小米note,都崩

LG Nexus 5X 都崩了

希望作者在项目上线前修复。。。。很急

发自网易邮箱大师

在2018年07月5日 17:05,Misakisogiounotifications@github.com 写道:

LG Nexus 5X 都崩了


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

@zhangtuodd 请使用 0.5.1-beta1 。

我下载源码,在onAlbumMediaLoad方法里加了cursor.isClosed 的方法判断,目前看应该没问题~

@REBOOTERS 可以了,多谢作者,良心知乎 @jiaozhige @Misakisogiou @jollychang @wayhome 0.5.1-beta1 版本修复了

For those who are as good as I am with chinese, the solution is to use 0.5.1-beta1.

(Hope this will help somebody)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Alastor111 picture Alastor111  ·  6Comments

HuRuWo picture HuRuWo  ·  4Comments

liuzhanta picture liuzhanta  ·  5Comments

xiaotianchang picture xiaotianchang  ·  4Comments

Mahan3340 picture Mahan3340  ·  4Comments