3

Я использую nostra's Universal Image Loader, я использую его для загрузки изображений в gridview размером 100 * 100, но исключение возбуждается КОГДА прокручивается очень быстро через сетку (только для демонстрации, у меня есть 13000 изображений на адаптере сетки), хотя библиотека обрабатывает исключение и пользователь не уведомляется об этом, ниже является исключениемСбой при загрузке Universal Image Loader

06-21 11:13:17.748: E/ImageLoader(2070): No such file or directory 
06-21 11:13:17.748: E/ImageLoader(2070): java.io.FileNotFoundException: No such file or directory 
06-21 11:13:17.748: E/ImageLoader(2070): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:145) 
06-21 11:13:17.748: E/ImageLoader(2070): at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:612) 
06-21 11:13:17.748: E/ImageLoader(2070): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:607) 
06-21 11:13:17.748: E/ImageLoader(2070): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:536) 
06-21 11:13:17.748: E/ImageLoader(2070): at android.content.ContentResolver.openInputStream(ContentResolver.java:371) 
06-21 11:13:17.748: E/ImageLoader(2070): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromContent(BaseImageDownloader.java:177) 
06-21 11:13:17.748: E/ImageLoader(2070): at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88) 
06-21 11:13:17.748: E/ImageLoader(2070): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:290) 
06-21 11:13:17.748: E/ImageLoader(2070): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:273) 
06-21 11:13:17.748: E/ImageLoader(2070): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:229) 
06-21 11:13:17.748: E/ImageLoader(2070): at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:135) 
06-21 11:13:17.748: E/ImageLoader(2070): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
06-21 11:13:17.748: E/ImageLoader(2070): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
06-21 11:13:17.748: E/ImageLoader(2070): at java.lang.Thread.run(Thread.java:856) 

Код на месте являются:

  1. WRITE_EXTERNAL_STORAGE добавляют

  2. Оба памяти и дискового кэша

  3. UnlimitedDiskCache для дискового кэша

  4. Используя новейшие библиотеки 1.9.2

Это, как говорится, библиотека аварий и больше не в состоянии не для загрузки изображения и повторяет все предыдущие изображения, как сбросить библиотеку в таких случаях и начать новую, в случае таких сбоев?

Ниже конфигурация ImageLoader

String cacheDirectory=context.getCacheDir()+ImageLoaderConstants.IMAGE_CACHE_DIRECTOY_PATH; 
     File cacheDir=new File(cacheDirectory); 
     DisplayImageOptions options = new DisplayImageOptions.Builder() 
     .delayBeforeLoading(0) 
     .cacheInMemory(true) 
     .cacheOnDisk(true) 
     .imageScaleType(ImageScaleType.EXACTLY) 
     .bitmapConfig(Bitmap.Config.RGB_565) 
     .displayer(new SimpleBitmapDisplayer()) 
     .build(); 

     ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPoolSize(5) 
       .threadPriority(Thread.NORM_PRIORITY) 
       .denyCacheImageMultipleSizesInMemory() 
       .memoryCacheExtraOptions(1280, 720) 
       .diskCacheExtraOptions(1280, 720,null) 
       .memoryCache(new LruMemoryCache(5*1024*1024)) 
       .diskCache(new UnlimitedDiscCache(cacheDir)) 
       .defaultDisplayImageOptions(options) 
       .build(); 

UPDATE:

адаптер код не имеет ничего особенного,

imageLoader.displayImage(uriPath, holder.imgThumbnail); 

У меня есть все конфигурации, как это определено в разделе Использование на UIL GitHub

+0

Я рекомендовал использовать фреймворк androidquery для использования, поскольку он обрабатывает даже «из памяти» ошибку. http://code.google.com/p/android-query/ –

+0

Включена ли опция кэширования памяти в вашей конфигурации? – Nima

+0

@Nima да, это –

ответ

4

Один из моих любимых библиотеки,

в первую очередь добавьте

DisplayImageOptions options = new DisplayImageOptions.Builder() 
     .delayBeforeLoading(0) 
     .cacheInMemory(true) 
     .cacheOnDisk(true) 
     .resetViewBeforeLoading(true) // add this line 
     .imageScaleType(ImageScaleType.EXACTLY) 
     .bitmapConfig(Bitmap.Config.RGB_565) 
     .displayer(new SimpleBitmapDisplayer()) 
     .build(); 

путем добавления этой строки изображения не reflact при прокрутке.

и вторая вещь, Проверь ниже не связывает
https://github.com/nostra13/Android-Universal-Image-Loader#useful-info

в этой точке ссылки чтения нет 8. Остановки загрузки, когда список прокрутки/GridView.

boolean pauseOnScroll = false; // or true 
boolean pauseOnFling = true; // or false 
PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling); 
listView.setOnScrollListener(listener); 

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

+0

это не поможет! –