Images not cache in memory with Univeral Image Loader - android

I am using Universal image loader to load images from the url. but images are not getting stored in the cache after loading. can anyone help? this is the code
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.no_pic)
.showImageForEmptyUri(R.drawable.no_pic)
.showImageOnFail(R.drawable.no_pic).cacheInMemory(true)
.considerExifParams(true).bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
c).threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.tasksProcessingOrder(QueueProcessingType.LIFO)
.writeDebugLogs().build();
// if (!imageLoader.isInited()) {
imageLoader.init(config);

use cache on disk instead of cache on memory

Related

Caching Imager using UNIVERSAL IMAGE LOADER

I am trying to cache image using universal image loader
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder().cacheOnDisk(true).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY).resetViewBeforeLoading(true)
.displayer(new BitmapDisplayer(100)).bitmapConfig(Bitmap.Config.RGB_565).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).defaultDisplayImageOptions(defaultOptions).memoryCache(new WeakMemoryCache())
.diskCacheSize(10 * 1024 * 1024).build();
ImageLoader.getInstance().init(config);
for display images
ImageLoader.getInstance().displayImage(imageUrl, imageview,defaultOptions);
now I can come to know that images are loading from cache or from url ?
you can check using following method
MemoryCacheUtils.findCachedBitmapsForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());
This will let you know about this
You can add config.writeDebugLogs(); to your Universal Image Loader config
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY - 2);
config.denyCacheImageMultipleSizesInMemory();
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
Then when you load image, check the logcat to know that image is loading from cache or from url

How to cache image with universal image loader in android

I use UniversalImageLoader library for android:
I would like to cache image but now it is downloading everytime:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.build();
ImageLoader.getInstance().displayImage(url, iv, options);
How should i configure the options to cache the images to disk?
Try both of this code :
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.build();
I used both of them and the images are cached.

How To Use universal image loader offline caching?

Is it possible to catch offline using universal image loader?
If possible, how to use it?
Using configs?
How To Set Download Directory manually?
out of memory erroron load huge images :
my codes :
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(G.appConfigs.context)
.defaultDisplayImageOptions(defaultOptions)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.diskCacheExtraOptions(480, 800, null)
.memoryCache(new WeakMemoryCache())
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(300 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
// END - UNIVERSAL IMAGE LOADER SETUP
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(R.drawable.no_pic)
.showImageOnFail(R.drawable.load_failed)
.showImageOnLoading(R.drawable.img_thumb).build();
//download and display image from url
imageLoader.displayImage(imgURL, img, options);
how to resolve it ?
You can use the ImageLoaderConfiguration.Builder class to customize disk caching. This includes the methods:
diskCacheExtraOptions()
diskCacheSize() (in bytes).
diskCacheFileCount()
diskCacheFileNameGenerator()
and some others.
Or you can just use diskCache(DiskCache) to provide a custom class for implementing offline caching.
From the example in the Configuration section of the wiki:
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.diskCacheExtraOptions(480, 800, null)
.taskExecutor(...)
.taskExecutorForCachedImages(...)
.threadPoolSize(3) // default
.threadPriority(Thread.NORM_PRIORITY - 1) // default
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiscCache(cacheDir)) // default
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(100)
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(context)) // default
.imageDecoder(new BaseImageDecoder()) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs()
.build();
But if you restart your device or clean your cache by anyway it will not work offline as the cached files will be deleted.
To Show offline images you have to download images on sd-card to a specific folder and have to pick from there in case on offline.
Don't Know much about such lib. but you can use the following method to download your images.
Just Call it from an Async. Task and pass your url.
private File root = Environment.getExternalStorageDirectory();
private File dir = new File(root.getAbsolutePath() + "/ImageFolder");
private void downloadFile(String url) throws Exception {
URL ur = new URL(url);
String fileName = url.substring(url.lastIndexOf("/") + 1);
File file = new File(dir, fileName);
URLConnection uconn = ur.openConnection();
InputStream is = uconn.getInputStream();
BufferedInputStream bufferinstream = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bufferinstream.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
}
Universal Image Loader is one perfect library to load async your images.
You can use #matiash answer to setup library configuration and then with
ImageLoader.getInstance().init(config);
you can apply them to the ImageLoader instance.
After that if you have internet connection at the begin of your application, Universal Image Loader will download and cache all your images, on the places where you use loading of those images with Universal Image Loader library. The next time when you load same images, Universal Image Loader will get them from the cache, which means you don't need to have any internet connection(can work offline).
The problem came when somebody is installing your application and trying to start using it for the first time, and if he doesn't have internet connection. Then Universal Image Loader will try to load your images from the web server and cache them to the storage, but it will fail because you don't have internet connection. That's why Universal Image Loader has a class like DisplayImageOptions :
new DisplayImageOptions.Builder()
which allow you to setup what should happen when there is a problem with loading your images. You can use for this purpose methods like:
.showImageOnLoading(R.drawable.default_image)
.showImageForEmptyUri(R.drawable.default_image)
.showImageOnFail(R.drawable.default_image)
Here is an example how you can use it:
DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
.showImageOnLoading(getImageLoaderDefaultImage())
.showImageForEmptyUri(getImageLoaderDefaultImage())
.showImageOnFail(getImageLoaderDefaultImage())
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.build();
Method getImageLoaderDefaultImage():
private int getImageLoaderDefaultImage(){ return R.drawable.default_img;}
And here is how to use Image Loader when you want to load image:
ImageLoader.getInstance().displayImage("image url", myImageView,imageOptions);
If you are using Xamarin : Add Below code in OnCreateView or similar is available in Java also.
DisplayImageOptions options = new DisplayImageOptions.Builder().CacheInMemory(true).CacheOnDisk(true).Build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.Context).DefaultDisplayImageOptions(options).Build();
ImageLoader.Instance.Init(config);
Add below line of code, when loading image
ImageLoader imageLoader = ImageLoader.Instance;
imageLoader.DisplayImage(imgURL, imageSource);

android universal image loader not caching or saving image

I am using universal image loader to load images. The issue is that It does not save loaded images in cache Here is my code.
Map<String, String> headers = new HashMap<String, String>();
headers.put("key", Commons.CURRENT_ACTIVE_PROFILE.getKey());
headers.put("secret", Commons.CURRENT_ACTIVE_PROFILE.getSecret());
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(mActivity)
.imageDownloader(new CustomImageDownaloder(mActivity)).build();
//imageLoader.init(ImageLoaderConfiguration.createDefault(mActivity));
imageLoader.init(config);
imageLoader = ImageLoader.getInstance();
displayImageOptions = new DisplayImageOptions.Builder()
.extraForDownloader(headers)
.showImageForEmptyUri(R.drawable.no_preview)
.showImageOnLoading(R.drawable.no_preview)
.showImageOnFail(R.drawable.no_preview)
.cacheInMemory(true)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
The problem is when I use following line for ImageLoaderCinfiguration that creates a default settings It would work fine and saves the images in cache.
imageLoader.init(ImageLoaderConfiguration.createDefault(mActivity));
But I want to use custom settings for ImageLoaderConfiguration because I am using CustomImageDownloader to pass key/secret with URL. So i use following lines for config
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(mActivity)
.imageDownloader(new CustomImageDownaloder(mActivity)).build();
But In this case it doest not save image and if I run the app without internet it does not load the images. Any help/suggestion please?
Possible duplicate I have tried that but no use.
U can use this simple method for Image Loader view
private void initImageLoader() {
// ImageLoader initializing
DisplayImageOptions opts = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisc(true).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(opts).build();
ImageLoader.getInstance().init(config);
}
I have resolved the issue myself. as using
.imageDownloader(new CustomImageDownaloder(mActivity)).build();
would override the default imageDownloader that is
.imageDownloader(new BaseImageDownloader(getApplicationContext())) // default
Default image downloader class contains diffrent methods to load images from web, local storage, assets etc. But the CustomImageDownaloder that i have created only contains code to get stream from web/network. So what I did is to copy and paste all the code of default BaseImageDownloader to CustomImageDownaloder and just modify the
getStreamFromNetwork(String imageUri, Object extra)
according to my requirements.

image can't be decoded

I am using Universal image loader.It is working fine but not decoding few images.
logcat error -Decode returned false
image can't be decoded.
please find below the sample code for the same.
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.iphoneicon_small).cacheInMemory()
.cacheOnDisc().displayer(new RoundedBitmapDisplayer(20))
.build();
imageLoader = ImageLoader.getInstance();
ImageLoaderConfiguration imgconfig = ImageLoaderConfiguration
.createDefault(activity);
imageLoader.init(imgconfig);
imageURL = contacts.get(AndroidJSONParsingActivity.LOGO_IMAGE);
imageLoader.displayImage(Utils.getEncodedUrl(imageURL),
holder.image_logo_icon, options);
In my getview there should be five images but it is loading 3 images and two default image that i set and not from web server.

Categories

Resources