今天看了mars的视频学了一下异步下载图片。
下面我写下代码希望对大家有所帮助:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagineView = (ImageView) findViewById(R.id.imagieView);
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("提示");
progressDialog.setCancelable(false);
progressDialog.setMessage("正在下载请耐心等待。。。");
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new AsncTaskActivity().execute(PATH);
}
});
}
public class AsncTaskActivity extends AsyncTask<String, Integer, byte[]> {
// 没运行前
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
// 后台运行并且这里的返回值用于传送的参数
@Override
protected byte[] doInBackground(String... params) {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
byte[] result = null;
try {
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == 200) {
result = EntityUtils.toByteArray(response.getEntity());
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
}
return result;
}
// 更新中,一般放进度条,不用就可以不写
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
// 发送执行结果
@Override
protected void onPostExecute(byte[] result) {
super.onPostExecute(result);
// 从数组当中解码位图
Bitmap map = BitmapFactory
.decodeByteArray(result, 0, result.length);
// 传入的是一个位图的对象
imagineView.setImageBitmap(map);
progressDialog.dismiss();
}
}
}
布局的话只有一个按钮和imagineView就不做介绍了。还有访问网络需要权限的。
下面是代码的连接:http://download.csdn.net/detail/kluing/7639213