关于下载的问题我们首先要了解下载图片需要一些权限
1.关于连接网络的权限
我们在启动项添加
这样手机就可以连接到网络
2.之后关于安卓手机的不同的版本我们需要添加不同的权限
5.0以下的版本不需要考虑这个权限问题他们只要考虑网络问题
其他的我们需要添加
这个权限条件
首先我们要考虑文件是否存在 使用if语句判断一下 然后根据潘丹的条件我们在进行下一步的结果代码如下
public class DownLoadTask extends AsyncTask<String,Integer,Integer> {
private String dirpath; //下载图片的目录 例如/root/pic/
private String filepath; //文件的存储位置 /root/pic/a.png
private Context context;
private ImageView loadimg;
public DownLoadTask(Context context,ImageView loadimg){
this.context=context;
this.loadimg=loadimg;
}
@Override
protected Integer doInBackground(String... integers) {
String fileName = integers[1];//要存储的名字
//判断目录是否存在。若不在,创建目录
dirpath = Environment.getExternalStorageDirectory()+"/"+"down_pics/";
File dir = new File(dirpath);
//判断目录是否存在。若不在,创建目录
if (!dir.exists()){
dir.mkdir();
}
filepath=dirpath+fileName;
File file = new File(filepath);//创建文件对象
if (file.exists()){
return -1;
}else
{
try {
file.createNewFile();//不存在,就创建这个文件
} catch (IOException e) {
e.printStackTrace();
}
}
之后我们就要判断网络是否可以使用这里又有一个判断语句,后面我们要建立一个缓冲区以便节约资源,也非常方便下载
导入代码如下
try {
URL url = new URL(integers[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;
}
之后我们就要更具前面的判断返回值来给以使用者信息这里还有一段代码展示
至于之后要把下载好的代码展示出来我们就要在根目录下将文件提取出来然后展现在屏幕上这时候
就是Bitmap发挥用武之地
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;
}
}
之后再Activity中调用代码如下
DownLoadTask task = new DownLoadTask(Main2Activity.this,imageView);
task.execute(purl,"frqr.jpg");
以上就是将图片下载然后再屏幕上表现出来