图片下载步骤
- 在DownloadTask文件中,首先要有下载图片路径
private String dirPath; - 第二要有文件名字
private String filePath - 在activity文件里面操作,ImgActivity传参将图片文件传参过来,传入参数
loadBtn.setOnClickListener……
{
new DownloadTask().excute(picUrl,”frarri.jpg”);
} 在doInBackground方法中传参,将要存储的图片名字传过来
然后,判断目录是否存在,若不存在,创建目录
创建目录对象
判断是否存在,如果不存在,则创建判断文件是否存在,若不存在,创建文件
判断,如果存在,返回-1(文件已经创建) ,被onPostExcute接收
如果不存在,则创建出这个文件- 准备输入流输出流
- 文件填充内容
URL
HttpU
判断是否能拿到输入流,返回码如果是200,则正常创建输入流
如果不是,返回-2,中断操作,直接返回 - 开始输入,outPutStream
定义一个int length=0;
定义一个缓冲区
开始往文件写入,直到……,开始输入下载 在onPostExcute文件中,判断integer
如果是1,正常下载完成,创建一个构造方法DownloadTask
Tost.makeText(context,)
将imgview传过来,修改构造方法
-1,文件已存在
-2,网络异常
代码展示
DownloadActivity
public class DownloadActivity extends AppCompatActivity {
private Button loadbtn;
private ImageView loadimg;
private String pirUrl="https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1520996808&di=573fdc8e3616f7c8eefceaa71a1236ab&src=http://p2.gexing.com/G1/M00/0C/D9/rBACE1Znl5yQ2i7HAAHBy-3TTyA645.png";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_download);
bindID();
loadbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadTask task=new DownloadTask(DownloadActivity.this,loadimg);
task.execute(pirUrl,"rqki.png");
}
});
}
private void bindID() {
loadbtn=findViewById(R.id.load_btn);
loadimg=findViewById(R.id.load_img);
}
}
DownloadTask
public class DownloadTask extends AsyncTask<String,Integer,Integer>{
private String dirPath;//下载图片的目录
private String filePath;//下载文件存储位置
private Context context;
private ImageView loadImg;
String TAG="fv";
public DownloadTask(Context context,ImageView loadImg){
this.context=context;
this.loadImg=loadImg;
}
@Override
protected Integer doInBackground(String... strings) {
//判断目录是否存在,若不存在,创建目录
dirPath= Environment.getExternalStorageDirectory()+"/"+"download_pics/";
File dir=new File(dirPath);//目录对象
if(!dir.exists()){
dir.mkdir();
Log.e(TAG, "doInBackground: exist" );
}
//判断文件是否存在,若不存在,创建文件
filePath=dirPath+strings[1];//因为activity文件中传参数的位置是在第二个
File file=new File(filePath);//创建文件对象
if(file.exists()){
Log.e(TAG, "doInBackground:files exist" );
return -1;
}else {
try{
Log.e(TAG, "doInBackground:no exist" );
file.createNewFile();//若不存在,创建出这个文件
} catch (IOException e) {
e.printStackTrace();
}
}
InputStream inputStream= null;
FileOutputStream outputStream=null;
try{
URL url=new URL(strings[0]);
Log.e(TAG, "doInBackground: exist1" );
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
Log.e(TAG, "doInBackground: exist2" );
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.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;
}
}
}