使用HTTPUrlConnection下载网络图片并显示
1.判定文件夹是否存在并定义两个目录和文件对象
2.判断目录是否存在,若不存在,则创建目录
3.再判断文件是否存在,若不存在,则创建文件
4.对输入流与输出流进行设置
5.进行URL的初步设置
6.对返回码进行一个判定,判断是否连接成功
7.在onPostExecute()方法中,对传过来的值进行情况判定与输出
成果
代码展示
public class ImgActivity extends AppCompatActivity {
private Button loadBtn;
private ImageView loadImg;
private String picUrl = "http://static.meiguoshenpo.com/image/201404/18105219640.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_img);
bind();
loadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImgLoadTask task = new ImgLoadTask(ImgActivity.this,loadImg);
task.execute(picUrl,"reba.jpg");
}
});
}
private void bind() {
loadBtn = findViewById(R.id.loadpic_btn);
loadImg = findViewById(R.id.loadpic_img);
}
}
public class ImgLoadTask extends AsyncTask<String,Integer,Integer>{
private String dirPath;//下载图片的目录
private String filePath;//文件储存具体位置
private Context context;
private ImageView loadImg;
public ImgLoadTask(Context context,ImageView image){
this.context=context;
this.loadImg=image;
}
@Override
protected Integer doInBackground(String... strings) {
//判断目录是否存在,诺不存在,
dirPath = Environment.getExternalStorageDirectory()+"/download_pics/";
File dir = new File(dirPath);//目录对象
if (!dir.exists()){
dir.mkdir();
}
//判断文件是否存在,若不存在,创建文件
filePath = dirPath+strings[1];
File file = new File(filePath);
if (file.exists()){
return -1;
}else {
try {
file.createNewFile();//不存在,就创建出这个文件
} catch (IOException e) {
e.printStackTrace();
}
}
InputStream inputStream = null;
OutputStream outputStream = null;
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode()==200){
//判断返回码是否正常,若正常创建输入流,否则就直接返回
inputStream = connection.getInputStream();
}else {
return -2;
}
outputStream = new FileOutputStream(file);
int length = 0;
byte[] buffer = new byte[4*1024];//缓冲区
while ((length=inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,length);
}
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return 1;
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
switch (integer){
case 1:
//正常下载完成
Toast.makeText(context,"下载完成",Toast.LENGTH_SHORT).show();
Bitmap bm = BitmapFactory.decodeFile(filePath);
loadImg.setImageBitmap(bm);
break;
case -1:
//文件已存在
Toast.makeText(context,"文件已存在",Toast.LENGTH_SHORT).show();
break;
case -2:
//网络异常
Toast.makeText(context,"网络异常",Toast.LENGTH_SHORT).show();
break;
}
}
}