image can't be decoded - android

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.

Related

Universal Image loader not refresh image if changed from server with same URL

I have used Universal Image Loader for load image from a server and also getting cached it into memory for fast loading.
But from server side used the same URL for update image.
For eg., www.example.com/xyz.png is URL for the image when they needed to update image they return same URL with a different image.
In this case, Universal Image Loader return image which is previously cached in memory (I think it cached image using its related URL).
So, I needed to Change image if URL returned a different image.
This is my code which I use for load image
DisplayImageOption.java
public class DisplayImageOption {
public static DisplayImageOptions getDisplayImage() {
// .displayer(new RoundedBitmapDisplayer(0))
return new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.icon_place_holder)
.showImageForEmptyUri(R.mipmap.icon_place_holder)
.showImageOnFail(R.mipmap.icon_place_holder)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true).build();
}
public static DisplayImageOptions getDisplayRoundedImage() {
return new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.icon_place_holder)
.showImageForEmptyUri(R.mipmap.icon_place_holder)
.showImageOnFail(R.mipmap.icon_place_holder)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(100)).build();
}
}
Code for Image Loading
ImageLoader.getInstance().displayImage(url, imageView, DisplayImageOption.getDisplayImage());
Thanks
In your ImageLoaderConfiguration add diskCache option.
File cacheDir = StorageUtils.getCacheDirectory(context);
long cacheAge = 10L;
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.diskCache(new LimitedAgeDiscCache(cacheDir, cacheAge)) // this will make the cache to remain for 10 seconds only
.build();
Then set it on ImageLoader and display image with your DisplayImageOption
ImageLoader.getInstance().init(config);
ImageLoader.getInstance().displayImage(url, imageView, DisplayImageOption.getDisplayImage());
What it does?
Taken from Android-Universal-Image-Loader
LimitedAgeDiscCache (Size-unlimited cache with limited files' lifetime. If age of cached file exceeds defined limit then it will be deleted from cache.)
And this piece of code is from Android-Universal-Image-Loader's LimitedAgeDiskCache.java class.
/**
* #param cacheDir Directory for file caching
* #param maxAge Max file age (in seconds). If file age will exceed this value then it'll be removed on next
* treatment (and therefore be reloaded).
*/
public LimitedAgeDiskCache(File cacheDir, long maxAge) {
this(cacheDir, null, DefaultConfigurationFactory.createFileNameGenerator(), maxAge);
}
You may like this approach as well.

Universal image loader displaying different image

I'm using universal image loader in my Android app and it's doing something weird.
I have users and each one of them can have different image profile, what I noticed is that when user 1 replaces his image, the UIL seems to load the old one, when I do this,
imageLoader.displayImage("file://" + profileImgFile, imgview);
it displays some old image, but when I do this
myBitmap = BitmapFactory.decodeFile(profileImgFile.getAbsolutePath(), options);
imgview.setImageBitmap(myBitmap);
it displays the new one.
My UIL setting is below,
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc().imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
.bitmapConfig(Bitmap.Config.RGB_565).cacheOnDisk(true).cacheInMemory(true).build();
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder( context).defaultDisplayImageOptions(defaultOptions).memoryCache(
new WeakMemoryCache());
ImageLoaderConfiguration config = builder.build();
ImageLoader.getInstance().init(config);
What am I doing wrong?
BTW, I tried removing all the cache settings you see above and it didn't help.

Images not cache in memory with Univeral Image Loader

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

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.

Images not loading from assets folder using Universal Image Loader

I do exactly what this guy suggests which is exactly the same as the creator of the Universal Image Loader, but I still get this error:
URI = assets://NMF0002_007.jpg
resolveUri failed on bad bitmap uri: NMF0002_007.jpg
What should I look for to ensure that the images are recognised?
I use it like this:
//get the file name
String fileName = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.FIELD_RESOURCE));
String imageUri = "assets://";
Log.d(TAG, "URI = " + imageUri + fileName);
ImageLoader.getInstance().displayImage(imageUri+fileName, holder.iv_details_resource);
This is my configuration:
//Get the imageloader.
ImageLoader imageLoader = ImageLoader.getInstance();
//Create image options.
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheOnDisc()
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
//Create a config with those options.
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(options)
.discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75)
.build();
//Initialise the imageloader.
imageLoader.init(config);
What am I doing wrong or missing?
Solution - I was looking for .jpg and my file extension was .JPG
If NOSTRA can post some clever things to be on the lookout for I'll mark your answer as an official answer to my silliness.

Categories

Resources