Skip to content

Instantly share code, notes, and snippets.

@onlyangel
Created January 20, 2012 05:24
Show Gist options
  • Save onlyangel/1645498 to your computer and use it in GitHub Desktop.
Save onlyangel/1645498 to your computer and use it in GitHub Desktop.
Descarga en background una imagen y asignala a un ImageView de android
package com.onlyangel.libs;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;
public class BackgroundImage {
private final Map<String, Drawable> drawableMap;
public BackgroundImage() {
drawableMap = new HashMap<String, Drawable>();
}
public Drawable fetchImage(String urlString) {
if (drawableMap.containsKey(urlString)) {
return drawableMap.get(urlString);
}
try {
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
if (drawable != null) {
drawableMap.put(urlString, drawable);
} else {
Log.w(this.getClass().getSimpleName(), "Can't get the Image");
}
return drawable;
} catch (MalformedURLException e) {
Log.e(this.getClass().getSimpleName(), "fetchImage failed", e);
return null;
} catch (IOException e) {
Log.e(this.getClass().getSimpleName(), "fetchImage failed", e);
return null;
}
}
public void fetchImageOnThread(final String urlString, final ImageView imageView) {
if (drawableMap.containsKey(urlString)) {
imageView.setImageDrawable(drawableMap.get(urlString));
}
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
imageView.setImageDrawable((Drawable) message.obj);
}
};
Thread thread = new Thread() {
@Override
public void run() {
//TODO : set imageView to a "pending" image
Drawable drawable = fetchImage(urlString);
Message message = handler.obtainMessage(1, drawable);
handler.sendMessage(message);
}
};
thread.start();
}
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
@bet02024
Copy link

Vientos Bro,
Pero yo mejor Uso esta liberia http://loopj.com/android-async-http/
Para evitarme el codigo de plomeria necesario para que los Threads no se bloquen.

:)

@onlyangel
Copy link
Author

Esta buena la libreria men gracias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment