Search code examples
androidhttpsuniversal-image-loader

How can I configure Universal Image Loader to display images from https?


I have problem with Universal Image Loader when my connection to server is https. I can display images with http but not with https connection. How can I set sslSocketFactory in UIL ? My UIL code is like below;

Map<String,String> authHeaders = new HashMap<>();
authHeaders.put("token", LocalStorage.getUserToken(ctx));

DisplayImageOptions defaults = new DisplayImageOptions.Builder()
    .displayer(new FadeInBitmapDisplayer(300, true, true, false))
    .showImageOnFail(R.drawable.ic_image_fail)
    .showImageForEmptyUri(R.drawable.ic_image_fail)
    .cacheOnDisk(true)
    .cacheInMemory(true)
    .bitmapConfig(Bitmap.Config.RGB_565)
    .extraForDownloader(authHeaders)
    .build();

ImageLoaderConfiguration.Builder configsBuilder = new ImageLoaderConfiguration.Builder(ctx)
    .imageDownloader(new AuthImageDownloader(ctx))
    .defaultDisplayImageOptions(defaults);
ImageLoader.getInstance().init(configsBuilder.build());

Solution

  • Kickoff sample:

    public class SslRuinedDownloader extends BaseImageDownloader {
    
        public SslRuinedDownloader(Context context) {
            super(context);
        }
    
        @Override
        protected HttpURLConnection createConnection(String url, Object extra) throws IOException {
            HttpsURLConnection conn = super.createConnection(url, extra);
    
            //here you go
            conn.setSSLSocketFactory(...);
            return conn;
        }
    }
    
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
            .imageDownloader(new SslRuinedDownloader(getApplicationContext()))
            .build();