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

下载远端资源,需要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();
			}
		}
	}
}

运行结果:

远程下载效果图

暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心