Asynchronously fetching images from Internet in Android
Here is a small class I wrote for Android, for loading pictures from the network in the background.
Not much, but quite handy.
import java.io.IOException;
import java.net.URL;
import java.net.HttpURLConnection;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class AsyncImageLoader extends Thread {
interface AsyncImageCallback {
/** @brief Called by an AsyncImageLoader upon request completion.
* @param url Same URL as the one passed to the AsyncImageLoader constructor.
* @param bm A Bitmap object, or null on failure.
*/
void onImageReceived(String url, Bitmap bm);
}
/** @brief Start an asynchronous image fetch operation.
* @param url The URL of the remote picture.
* @param cb The AsyncImageCallback object you want to be notified the operation completes.
*/
public AsyncImageLoader(String url, AsyncImageCallback cb) {
super();
mURL=url;
mCallback=cb;
start();
}
public void run() {
try {
HttpURLConnection conn = (HttpURLConnection)(new URL(mURL)).openConnection();
conn.setDoInput(true);
conn.connect();
mCallback.onImageReceived(mURL,BitmapFactory.decodeStream(conn.getInputStream()));
} catch (IOException e) {
mCallback.onImageReceived(mURL,null);
}
}
private String mURL;
private AsyncImageCallback mCallback;
}
Sample usage:
public class MyClass implements AsyncImageLoader.AsyncImageCallback {
void onImageReceived(String url, Bitmap bm) {
if (bm==null) {
System.err.println("Could not load picture '"+url+"'!");
}
else if ("http://somewhere.net/foo.png".equals(url)) {
paintFoo(bm);
}
}
void someFunction() {
new AsyncImageLoader("http://somewhere.net/foo.png", this);
}
}
Leave a Comment