DownTask实现后台下载功能

来源:互联网 发布:佛教直播软件 编辑:程序博客网 时间:2024/05/19 00:12

自定义一个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;}@Overrideprotected String doInBackground(URL... params) {StringBuilder sb = new StringBuilder();try {URLConnection conn = params[0].openConnection();// 打开conn连接对应的输入流,并将它包装成BufferedReaderBufferedReader 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();}@Overrideprotected 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 {@Overrideprotected 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
原创粉丝点击