mirror of
https://github.com/bspeice/itcs4180
synced 2024-12-04 13:18:16 -05:00
Downloading images from threads works. They aren't laid out correctly...
This commit is contained in:
parent
ecb13bc4ed
commit
d41468fc6f
@ -7,6 +7,7 @@
|
|||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="11"
|
android:minSdkVersion="11"
|
||||||
android:targetSdkVersion="18" />
|
android:targetSdkVersion="18" />
|
||||||
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -1,15 +1,54 @@
|
|||||||
package edu.uncc.itcs4180.hw4;
|
package edu.uncc.itcs4180.hw4;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
|
||||||
|
import org.apache.http.HttpConnection;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
|
||||||
public class PhotoThread extends Activity {
|
public class PhotoThread extends Activity {
|
||||||
|
|
||||||
|
ProgressDialog dialog;
|
||||||
|
public int[] imageUrlIds = {R.string.uncc_main_image, R.string.football_main_image,
|
||||||
|
R.string.ifest_main_image, R.string.commencement_main_image
|
||||||
|
};
|
||||||
|
private final int MSG_WHAT_ERROR = -1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_photo_thread);
|
setContentView(R.layout.activity_photo_thread);
|
||||||
|
|
||||||
|
// Set the initial progress dialog
|
||||||
|
dialog = new ProgressDialog(this);
|
||||||
|
dialog.setMessage("Downloading images...");
|
||||||
|
dialog.setCancelable(false);
|
||||||
|
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
||||||
|
dialog.show();
|
||||||
|
|
||||||
|
// Asynchronous, we're done after starting the downloads
|
||||||
|
Handler handler = new Handler(new PhotoThreadHandler(this));
|
||||||
|
downloadImages(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -18,5 +57,93 @@ public class PhotoThread extends Activity {
|
|||||||
getMenuInflater().inflate(R.menu.photo_thread, menu);
|
getMenuInflater().inflate(R.menu.photo_thread, menu);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void downloadImages(Handler handler) {
|
||||||
|
int progressIncrement = dialog.getMax() / imageUrlIds.length;
|
||||||
|
|
||||||
|
// Start up the thread pool, and get downloading!
|
||||||
|
ExecutorService pool = Executors.newFixedThreadPool(2);
|
||||||
|
pool.execute(new DownloadThread(getString(R.string.uncc_main_image), handler));
|
||||||
|
pool.execute(new DownloadThread(getString(R.string.football_main_image), handler));
|
||||||
|
pool.execute(new DownloadThread(getString(R.string.ifest_main_image), handler));
|
||||||
|
pool.execute(new DownloadThread(getString(R.string.commencement_main_image), handler));
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DownloadThread implements Runnable{
|
||||||
|
String url;
|
||||||
|
Handler handler;
|
||||||
|
|
||||||
|
public DownloadThread(String url, Handler handler) {
|
||||||
|
this.url = url;
|
||||||
|
this.handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// Download the image at the given URL
|
||||||
|
// If we ever encounter an issue, send an empty message
|
||||||
|
try {
|
||||||
|
// Connect to get our image
|
||||||
|
URL url = new URL(this.url);
|
||||||
|
HttpURLConnection con = (HttpURLConnection) url.openConnection();
|
||||||
|
con.connect();
|
||||||
|
int statusCode = con.getResponseCode();
|
||||||
|
if (statusCode == HttpURLConnection.HTTP_OK) {
|
||||||
|
// Download the image, and send it in a message to the handler
|
||||||
|
Bitmap image = BitmapFactory.decodeStream(con.getInputStream());
|
||||||
|
Message msg = Message.obtain(handler);
|
||||||
|
msg.obj = image;
|
||||||
|
handler.sendMessage(msg);
|
||||||
|
} else {
|
||||||
|
handler.sendEmptyMessage(MSG_WHAT_ERROR);
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
handler.sendEmptyMessage(MSG_WHAT_ERROR);
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Issue in the HTTP connection, not too much we can do here...
|
||||||
|
handler.sendEmptyMessage(MSG_WHAT_ERROR);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PhotoThreadHandler implements Handler.Callback {
|
||||||
|
Context ctx;
|
||||||
|
|
||||||
|
public PhotoThreadHandler(Context ctx) {
|
||||||
|
this.ctx = ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handleMessage(Message msg) {
|
||||||
|
// We are sent a message every time a download completes,
|
||||||
|
// so update the progress, and close the dialog if we're done.
|
||||||
|
int progressIncrement = dialog.getMax() / imageUrlIds.length;
|
||||||
|
|
||||||
|
// The message actually contains a Bitmap that we need to put in the UI, so do that
|
||||||
|
if (msg.what == MSG_WHAT_ERROR) {
|
||||||
|
dialog.dismiss();
|
||||||
|
Log.e("HANDLER", "Got a MSG_WHAT_ERROR, not sure what's up...");
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
// The thread worked just fine, so let's get the Bitmap out and create a view for it
|
||||||
|
Bitmap image = (Bitmap) msg.obj;
|
||||||
|
ImageView newImage = new ImageView(this.ctx);
|
||||||
|
newImage.setImageBitmap(image);
|
||||||
|
((ViewGroup)findViewById(android.R.id.content)).addView(newImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If (max - increment == current progress) we're done
|
||||||
|
if (dialog.getMax() - progressIncrement == dialog.getProgress())
|
||||||
|
dialog.dismiss();
|
||||||
|
else
|
||||||
|
dialog.setProgress(dialog.getProgress() + progressIncrement);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user