2015-09-29 2 views
2

У меня есть адаптер в моем приложении, который раздувает сообщения и показывает их в ListView. У каждого сообщения есть изображение, поэтому для хранения изображений используется LruCache.NullPointerException: ключ == null || value == null

Приложение работает хорошо, но оно разбилось два или три раза, и я не мог понять, в чем проблема. Только в прошлый раз, я мог бы получить этот журнал от LogCat:

E/AndroidRuntime (2407): Вызванный: java.lang.NullPointerException: ключ == NULL || value == null

Аварии случаются только в том случае, когда приложение недавно установлено (когда я удалю приложение с устройства и его снова установлю)! Когда я открываю приложение в первый раз и начинаю прокручивать вверх и вниз так быстро, иногда он падает. (Это не будет все время, это совершенно случайно!)

И после этого, он не будет врезаться больше ...:/

Я думаю, что это что-то делать с LruCache и пустой кэш , Я видел this question, но это не было моей проблемой! Я проверил нулевой кеш в своем коде:

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

Любое предложение?

P.S .: Я знаю, что мой вопрос не содержит достаточно подробностей, но это все, что у меня есть!

+0

Возможно, это похоже на http://stackoverflow.com/questions/31362653/java-lang-nullpointerexception-in-android-util-lrucache-put-android – Henry

ответ

1

Здесь я полагаю, что вы сами управляете кешем, я рекомендую использовать Picasso вместо использования каких-либо функций, это позволит автоматически управлять сетевыми операциями и кешем, вам придется писать только одну строку кода, а ваши случайные сбои будут больше не происходит.

Вот эта ссылка. http://square.github.io/picasso/

3

Согласно LruCache.java line 164, LruCache бросает NullPointerException с этим сообщением только в одном случае - когда вы пытаетесь вызвать put с нулевым ключом или значением.

поэтому я узнал, где put вызывается в кеш и видит, какие клавиши и значения там написаны и оттуда. В качестве альтернативы вы можете поставить точку останова в методе LruCache.javaput и посмотреть, что произойдет.