import
java.io.InputStream;
import
java.net.HttpURLConnection;
import
java.net.URL;
import
android.app.Activity;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.os.AsyncTask;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.ProgressBar;
import
android.widget.Toast;
/**
* AsyncTask 实现异步加载图片
* @author ZHF
*
*/
public
class
MainActivity
extends
Activity {
public
static
final
String IMG_URL=
"http://images.51cto.com/images/index/Images/Logo.gif"
;
Button btn_asynctask;
ImageView imgView;
ProgressBar progressBar;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgView = (ImageView)
this
.findViewById(R.id.imageView);
btn_asynctask = (Button)
this
.findViewById(R.id.btn_AsyncTask);
progressBar = (ProgressBar)
this
.findViewById(R.id.progressBar);
btn_asynctask.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
GetImgTask getImgTask =
new
GetImgTask();
getImgTask.execute(IMG_URL);
}
});
}
/**获取网络图片任务**/
private
class
GetImgTask
extends
AsyncTask<String, Integer, Bitmap> {
/**在 doInParams...)之前被调用,在ui线程执行 **/
@Override
protected
void
onPreExecute() {
imgView.setImageBitmap(
null
);
progressBar.setProgress(
0
);
}
/**在后台线程中执行的任务**/
@Override
protected
Bitmap doInString... params) {
publishProgress(
0
);
InputStream inputStream =
null
;
Bitmap imgBitmap =
null
;
try
{
URL url =
new
URL(IMG_URL);
if
(url !=
null
) {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(
2000
);
connection.setDoInput(
true
);
connection.setRequestMethod(
"GET"
);
int
code = connection.getResponseCode();
if
(
200
== code) {
inputStream = connection.getInputStream();
imgBitmap = BitmapFactory.decodeStream(inputStream);
}
}
}
catch
(Exception e) {
e.printStackTrace();
return
null
;
}
publishProgress(
100
);
return
imgBitmap;
}
/**在调用publishProgress之后被调用,在ui线程执行 **/
@Override
protected
void
onProgressUpdate(Integer... values) {
progressBar.setProgress(values[
0
]);
}
/**在后台线程执行完成之后,调用该方法,获取数据更新界面**/
@Override
protected
void
onPostExecute(Bitmap result) {
if
(result !=
null
) {
Toast.makeText(MainActivity.
this
,
"成功获取图片"
, Toast.LENGTH_LONG).show();
imgView.setImageBitmap(result);
}
else
{
Toast.makeText(MainActivity.
this
,
"获取图片失败"
, Toast.LENGTH_LONG).show();
}
}
/**取消任务,在ui线程执行 **/
@Override
protected
void
onCancelled() {
progressBar.setProgress(
0
);
super
.onCancelled();
}
}
}