使用AsyncTask下载远端资源到SD卡

作者:超级管理员更新时间:2016-09-29 15:32:53来源:未知点击:15642
下载远端资源,需要INTERNET权限;将文件写入到SD,需要WRITE_EXTERNAL_STORAGE权限;在AndroidManifest.xml中进行如下配置:AndroidAsyncTask

下载远端资源,需要INTERNET权限;
将文件写入到SD,需要WRITE_EXTERNAL_STORAGE权限;

在AndroidManifest.xml中进行如下配置:

Android AsyncTask提供了简单易用的方式,执行后台操作并更新UI。

AsyncTask的3个泛型

• Param  传入数据类型
• Progress  更新UI数据类型
• Result  处理结果类型

AsyncTask的4个步骤

1、onPreExecute  执行前的操作
2、doInBackGround  后台执行的操作
3、onProgressUpdate  更新UI操作
4、onPostExecute  执行后的操作

从网络下载资源到SD卡的步骤:

1、HTTP请求资源InputStream
2、在SD中创建一个空文件
3、创建该文件的FileOutputStream
4、使用while循环,InputStream每次循环读入数据到字节数组buffer中(buffer字节数组的大小一般为1024的整数倍),FileOutputStream将buffer中的数据写入文件,直到EOF,read()方法返回-1

示例代码:
功能:下载网络资源到本地

功能:用户界面,更新进度条和下载进度,显示下载图片

 package lizhen.download; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; public class Download extends Activity { private Button startButton; private ProgressBar downloadProgressBar; private TextView progressTextView; private ImageView downloadImageView; private final String source = "http://www.android-study.com/resource/atm.gif"; // 源文件地址 private final String path = Environment.getExternalStorageDirectory() .toString() + "/atm.gif"; // 目标文件地址 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.download); startButton = (Button) findViewById(R.id.download_StartButton); downloadProgressBar = (ProgressBar) findViewById(R.id.download_ProgressBar); progressTextView = (TextView) findViewById(R.id.download_ProgressTextView); downloadImageView = (ImageView) findViewById(R.id.download_ImageView); startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DownloadTask().execute(source, path); } }); } private class DownloadTask extends DownloadAsyncTask { @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); int progress = values[0]; /* * 更新进度条和下载百分率 */ downloadProgressBar.setMax(size); downloadProgressBar.setProgress(progress); int percentage = progress * 100 / size; progressTextView.setText("已完成" + percentage + "%"); } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); if (result) { Bitmap bitmap = BitmapFactory.decodeFile(path); downloadImageView.setImageBitmap(bitmap); } else { Toast.makeText(Download.this, "Error: " + errorMessage, 1000) .show(); } } } } 

运行结果:

远程下载效果图

推荐阅读

热门内容

黑盒测试进阶之后端server巧用对比测试
  一、什么是对比测试  一般而言,对比...

Android 耗电量测试及排查方法
  上图为2016年6月Google更新...

曾经的Java IDE 王者 Eclipse,它是如何没落的?
  根据今年6月份的一份调查,Eclip...

Linux内核SMP负载均衡浅析
  需求在《linux进程调度浅析》一文...

MacBook将在下个月发布,这是四年来最大的一次升级
  在iPhone和AppleWatch...

Salesforce不甘心竞购失败:欧盟应调查微软收购LinkedIn
  北京时间9月30日早间消息,Sale...

谷歌云计算业务更名 集成更多人工智能技术
  北京时间9月30日早间消息,谷歌周四...

央视:三星看似在补过 实际对中国和欧美区别待遇
  央视新闻客户端9月29日报道,就No...

列属性
1.3.3 列属性作用在报表每列上的属性...

全局属性
1.3.1 全局属性作用在整个报表上的属...