自定义一个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"));
}
}