2

我的应用程序中有一个适配器,它可以扩展帖子并将它们显示在ListView. 每个帖子都有一个图像,因此它用于LruCache存储图像。

该应用程序运行良好,但它崩溃了两三次,我无法意识到问题出在哪里。只有上一次,我可以从 LogCat 获得这个日志:

E/AndroidRuntime(2407): 引起: java.lang.NullPointerException: key == null || 值 == 空

崩溃仅在最近安装应用程序时发生(当我从设备中删除应用程序并重新安装时)!当我第一次打开应用程序并开始快速上下滚动时,有时它会崩溃。(它不会一直发生,它是完全随机的!)

在那之后,它不会再崩溃了......:/

我认为这与 LruCache 和空缓存有关。我看到了这个问题,但这不是我的问题!我确实在我的代码中检查了空缓存:

if (MainActivity.thumbnailsCache.get(postID) != null)
        {
            imageViewThumbnail.setImageBitmap(MainActivity.thumbnailsCache.get(postID));
        } else {
            new DownloadAndSetImageTask(thumbnailURL).execute();
        }

有什么建议吗?

PS:我知道我的问题没有足够的细节,但这就是我所拥有的全部信息!

4

2 回答 2

4

根据LruCache.java 第 164 行,仅在一种情况下LruCache抛出NullPointerException带有该消息的消息 - 当您尝试put使用空键或值调用时。

所以我会找出put缓存在哪里被调用,看看那里正在写什么键和值,然后从那里开始。LruCache.java或者,您可以在'方法中设置一个断点put,看看会发生什么。

于 2015-09-29T07:08:10.410 回答
1

在这里我猜你是在自己管理缓存,我建议使用Picasso而不是 any,这将自动管理网络操作和缓存,你只需要编写一行代码,你的随机崩溃就不会再发生了。

链接在这里。http://square.github.io/picasso/

于 2015-09-29T07:07:59.380 回答