ITEEDU

GenericTask使用示例

从网上获取一个网页,在一个TextView中将其源代码显示出来 。下载过程中有进度条显示进度。

任务类

public class NetTask extends GenericTask {
	public String s = null;

	@Override
	protected TaskResult _doInBackground(TaskParams... params) {
		TaskParams param = params[0];
		try {
			HttpClient client = new DefaultHttpClient();
			// params[0]代表连接的url
			HttpGet get = new HttpGet(param.getString("url"));
			HttpResponse response = client.execute(get);
			HttpEntity entity = response.getEntity();
			long length = entity.getContentLength();
			InputStream is = entity.getContent();
			if (is != null) {
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				byte[] buf = new byte[128];
				int ch = -1;
				int count = 0;
				while ((ch = is.read(buf)) != -1) {
					baos.write(buf, 0, ch);
					count += ch;
					if (length > 0) {
						// 如果知道响应的长度,调用publishProgress()更新进度
						publishProgress((int) ((count / (float) length) * 100));
					}
					// 让线程休眠100ms
					Thread.sleep(100);
				}
				s = new String(baos.toByteArray());
			}
			// 返回结果
			return TaskResult.OK;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return TaskResult.OK;
	}

}

UI界面

public class AndroidtestActivity extends Activity {
	private TextView message;
	private Button open;
	private EditText url;
	ProgressDialog pdialog=new ProgressDialog(this, 0);
	private NetTask netTask;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.network);
		message = (TextView) findViewById(R.id.message);
		url = (EditText) findViewById(R.id.url);
		open = (Button) findViewById(R.id.open);
		open.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				connect();
			}
		});

	}

	private void connect() {
		if (netTask != null
				&& netTask.getStatus() == GenericTask.Status.RUNNING) {
			return;
		} else {
			netTask = new NetTask();
			netTask.setListener(netTaskListener);
			TaskParams params = new TaskParams();
			params.put("url", url.getText().toString());
			netTask.execute();
		}
	}
	private TaskListener netTaskListener = new TaskAdapter() {
		@Override
		public void onPreExecute(GenericTask task) {
			// 任务启动,可以在这里显示一个对话框,这里简单处理
						message.setText("任务形始");
			pdialog.setButton("cancel", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int i) {
					dialog.cancel();
				}
			});
			pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
				public void onCancel(DialogInterface dialog) {
					finish();
				}
			});
			pdialog.setCancelable(true);
			pdialog.setMax(100);
			pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
			pdialog.show();
		}

		@Override
		public void onPostExecute(GenericTask task, TaskResult result) {
			if (result == TaskResult.OK) {
				message.setText(netTask.s);
				pdialog.dismiss();
			} 
		}
		@Override
		public void onProgressUpdate(GenericTask task, Object value) {
			// 更新进度
			System.out.println("" + value);
			message.setText("" + value);
			pdialog.setProgress((Integer) value);
		}
	};
}