前台显示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView_img"
android:src="@mipmap/ic_launcher"
android:layout_height="200dp"
android:layout_width="200dp"
android:layout_gravity="center_horizontal"
/>
<Button
android:onClick="click"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="下载"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
后台逻辑:
package com.example.lenovo.async_imagedownload;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private ImageView imageView_img;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.imageView_img = (ImageView) this.findViewById(R.id.imageView_img);
}
public void click(View view){
this.progressDialog = new ProgressDialog(this);
this.progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
String path = "https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=61e019ca7dec54e755e1124cd851f035/7a899e510fb30f24027878f7ce95d143ac4b0367.jpg ";
new myAsyncTask().execute(path);
}
private final class myAsyncTask extends AsyncTask<String,Integer,Bitmap>{
@Override
protected void onPreExecute(){
progressDialog.setMessage("正在下载网络图片,请稍等。。。");
progressDialog.show();
}
/**
* 网络下载操作
* @param params
* @return
*/
@Override
protected Bitmap doInBackground(String... params) {
try{
//1.根据网址得到统一资源定位符对象
URL url = new URL(params[0]);
//2.打开连接
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//3.设置相关参数
httpURLConnection.setConnectTimeout(3000);//三秒后如果连接不上,
//向服务器发送请求并得到服务器返回的状态码:200表示 ok
//4.得到输入流对象
InputStream inputStream = httpURLConnection.getInputStream();
//5.得到网络图片的总大小
int size = httpURLConnection.getContentLength();
publishProgress(0,size);//0:代表报告的是文件的总大小
ByteArrayOutputStream byteArrayOuputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = inputStream.read(buffer))!=-1){
byteArrayOuputStream.write(buffer,0,len);
publishProgress(1,len);//1.代表报告下载的进度
}
byte[] data = byteArrayOuputStream.toByteArray();
//将字节数组还原成原始图片对象
Bitmap bitmap = BitmapFactory.decodeByteArray(data,0,data.length);
return bitmap;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer...values){
switch (values[0]){
case 0:
progressDialog.setMax(values[1]);
break;
case 1:
progressDialog.incrementProgressBy(values[1]);
break;
}
}
@Override
protected void onPostExecute(Bitmap bitmap) {
progressDialog.dismiss();
if (bitmap == null) {
Toast.makeText(MainActivity.this, "网络图片下载失败",Toast.LENGTH_LONG).show();
return;
}
//将下载好的bitmap图像显示到imageView控件上
imageView_img.setImageBitmap(bitmap);
}
}
}
注意: 需要实现此功能,必须在功能清单文件下添加
<uses-permission android:name="android.permission.INTERNET"/>这句权限代码才可以实现要实现的功能。