package greendrm.ui.block;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
public class UIBlockActivity extends Activity {
private static final String TAG = "UIBlock";
private String imgUrl = "http://pds18.egloos.com/pds/201008/31/31/e0019531_4c7c327a2e410.jpg";
private ImageView mImageView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mImageView = (ImageView)findViewById(R.id.imageView1);
}
public void onClickButton(View v) {
mImageView.post(new Runnable() {
//new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Bitmap bitmap = null;
// try {
// bitmap = bitmapFromNetwork(imgUrl);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// mImageView.setImageBitmap(bitmap);
new DownloadImageTask().execute(imgUrl);
}
});
//}).start();
}
private Bitmap bitmapFromNetwork(String... urls) throws IOException {
return BitmapFactory.decodeResource(this.getResources(), R.drawable.android2);
}
private Bitmap downloadBitmap(String url) {
// AndroidHttpClient is not allowed to be used from the main thread
//final HttpClient client = new DefaultHttpClient();
final HttpClient client = AndroidHttpClient.newInstance("Android");
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("ImageDownloader", "Error " + statusCode +
" while retrieving bitmap from " + url);
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
inputStream = entity.getContent();
// return BitmapFactory.decodeStream(inputStream);
// Bug on slow connections, fixed in future release.
return BitmapFactory.decodeStream(new FlushedInputStream(inputStream));
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (IOException e) {
getRequest.abort();
Log.w(TAG, "I/O error while retrieving bitmap from " + url, e);
} catch (IllegalStateException e) {
getRequest.abort();
Log.w(TAG, "Incorrect URL: " + url);
} catch (Exception e) {
getRequest.abort();
Log.w(TAG, "Error while retrieving bitmap from " + url, e);
} finally {
if ((client instanceof AndroidHttpClient)) {
((AndroidHttpClient) client).close();
}
}
return null;
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
private Bitmap result;
@Override
protected Bitmap doInBackground(String... arg0) {
// TODO Auto-generated method stub
result = downloadBitmap(arg0[0]);
// try {
// result = bitmapFromNetwork(arg0[0]);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
return result;
}
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}
static class FlushedInputStream extends FilterInputStream {
public FlushedInputStream(InputStream inputStream) {
super(inputStream);
}
@Override
public long skip(long n) throws IOException {
long totalBytesSkipped = 0L;
while (totalBytesSkipped < n) {
long bytesSkipped = in.skip(n - totalBytesSkipped);
if (bytesSkipped == 0L) {
int b = read();
if (b < 0) {
break; // we reached EOF
} else {
bytesSkipped = 1; // we read one byte
}
}
totalBytesSkipped += bytesSkipped;
}
return totalBytesSkipped;
}
}
}