From da9955cd67062c29f6b6b922cd9b05f5a0f68b56 Mon Sep 17 00:00:00 2001 From: Robert Kolner Date: Tue, 17 Jan 2012 23:58:25 +0100 Subject: [PATCH] Lazy loading of dancing images. --- .../app/network/ImageLoader.java | 57 +++++++++++++++++++ .../app/ui/EventListActivity.java | 22 +------ 2 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 src/com/studentersamfundet/app/network/ImageLoader.java diff --git a/src/com/studentersamfundet/app/network/ImageLoader.java b/src/com/studentersamfundet/app/network/ImageLoader.java new file mode 100644 index 0000000..8ab27e6 --- /dev/null +++ b/src/com/studentersamfundet/app/network/ImageLoader.java @@ -0,0 +1,57 @@ +package com.studentersamfundet.app.network; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.InvalidParameterException; +import java.util.HashMap; +import java.util.Map; + +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.util.Log; +import android.widget.ImageView; + +public class ImageLoader extends AsyncTask { + public final static Map cache = new HashMap(); + private final ImageView view; + + public ImageLoader(ImageView... views) { + if (views.length > 1) + throw new InvalidParameterException("Too many arguments to the function!"); + + this.view = views[0]; + } + + @Override + protected Drawable doInBackground(String... params) { + if (params.length > 1) + throw new InvalidParameterException("Too many arguments to the function!"); + + Drawable d = cache.get(params[0]); + if (d != null) + return d; + + try { + HttpURLConnection con = (HttpURLConnection)new URL(params[0]).openConnection(); + InputStream is = con.getInputStream(); + + d = Drawable.createFromStream(is, params[0].toString()); + cache.put(params[0], d); + } catch (IOException e) { + Log.e("DNSapp", "An exception has occured while downloading images!", e); + } + return d; + } + + @Override + protected void onPostExecute(Drawable result) { + super.onPostExecute(result); + + if (result != null && view != null) { + view.setImageDrawable(result); + } + } +} diff --git a/src/com/studentersamfundet/app/ui/EventListActivity.java b/src/com/studentersamfundet/app/ui/EventListActivity.java index 561eb24..3e72b32 100644 --- a/src/com/studentersamfundet/app/ui/EventListActivity.java +++ b/src/com/studentersamfundet/app/ui/EventListActivity.java @@ -1,18 +1,12 @@ package com.studentersamfundet.app.ui; import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; import java.text.SimpleDateFormat; import org.w3c.dom.NodeList; import android.app.Dialog; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.text.Html; @@ -36,6 +30,7 @@ import com.studentersamfundet.app.Event; import com.studentersamfundet.app.FeedFetcher; import com.studentersamfundet.app.R; import com.studentersamfundet.app.RSSParserProgram; +import com.studentersamfundet.app.network.ImageLoader; import com.studentersamfundet.app.ui.ChooseCategoryDialog.Callback; public class EventListActivity extends BaseDnsActivity { @@ -114,19 +109,8 @@ public class EventListActivity extends BaseDnsActivity { /* Set images: */ ImageView imageView = (ImageView) row.findViewById(R.id.event_list_row_image); - try { - String urlStr = e.getImageUri(imageSize).toString(); - URL ulrn = new URL(urlStr); - HttpURLConnection con = (HttpURLConnection)ulrn.openConnection(); - InputStream is = con.getInputStream(); - Bitmap bmp = BitmapFactory.decodeStream(is); - - if (null != bmp) { - imageView.setImageBitmap(bmp); - } - - } catch (MalformedURLException ex1){ /* TODO: Default image */ - } catch (IOException ex2) { /* TODO: Default image */ } + ImageLoader loader = new ImageLoader(imageView); + loader.execute(e.getImageUri(imageSize).toString()); /* Set text: */