DownTask实现后台下载功能

自定义一个DownTask extends AsyncTask<URL, Integer, String> ,三个参数分别是 execute的参数 进度值 onpostExcute的参数,

注意:

1必须在UI线程中创建该实例

2必须在UI线程中调用execute方法

3不得调用以on开头的回调函数。

4别忘了加<uses-permission android:name="android.permission.INTERNET"/>

DownTask中的方法

package com.example.asynctasktest;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.TextView;
//三个参数分别是 execute的参数 进度值 onpostExcute的参数
public class DownTask extends AsyncTask<URL, Integer, String> {
	private TextView show;
	// 可变长的输入参数,与AsyncTask.exucute()对应
	ProgressDialog pdialog;
	// 定义记录已经读取行的数量
	int hasRead = 0;
	Context mContext;

	public DownTask(Context ctx) {
		show = (TextView)((Activity)ctx).findViewById(R.id.textView1);
		mContext = ctx;
	}

	@Override
	protected String doInBackground(URL... params) {
		StringBuilder sb = new StringBuilder();
		try {
			URLConnection conn = params[0].openConnection();
			// 打开conn连接对应的输入流,并将它包装成BufferedReader
			BufferedReader br = new BufferedReader(new InputStreamReader(
					conn.getInputStream(), "utf-8"));
			String line = null;
			while ((line = br.readLine()) != null) {
				sb.append(line + "\n");
				hasRead++;
				//调用该方法会触发onProgressUpdate方法
				publishProgress(hasRead);
			}
			return sb.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	//执行完后回调
	protected void onPostExecute(String result) {
		// 返回HTML页面的内容
		pdialog.dismiss();
		show.setText(result);
	}

	@Override
	//执行前回调
	protected void onPreExecute() {
		pdialog = new ProgressDialog(mContext);
		// 设置对话框的标题
		pdialog.setTitle("任务正在执行中");
		// 设置对话框 显示的内容
		pdialog.setMessage("任务正在执行中,敬请等待...");
		// 设置对话框不能用“取消”按钮关闭
		pdialog.setCancelable(false);
		// 设置该进度条的最大进度值
		pdialog.setMax(202);
		// 设置对话框的进度条风格
		pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		// 设置对话框的进度条是否显示进度(容易卡)
		pdialog.setIndeterminate(false);
		pdialog.show();
	}

	@Override
	protected void onProgressUpdate(Integer... values) {
		// 更新进度
		show.setText("已经读取了【" + values[0] + "】行!");
		pdialog.setProgress(values[0]);
	}

}


Activity中的方法

package com.example.asynctasktest;

import java.net.MalformedURLException;
import java.net.URL;

import android.os.Bundle;
import android.app.Activity;
import android.os.AsyncTask;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void download(View source) throws MalformedURLException {
		DownTask task = new DownTask(this);
		task.execute(new URL("http://10.100.71.61/1.txt"));
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值