package
com.example.asynctasktest;
import
java.io.ByteArrayOutputStream;
import
java.io.InputStream;
import
org.apache.http.HttpEntity;
import
org.apache.http.HttpResponse;
import
org.apache.http.HttpStatus;
import
org.apache.http.client.HttpClient;
import
org.apache.http.client.methods.HttpGet;
import
org.apache.http.impl.client.DefaultHttpClient;
import
android.app.Activity;
import
android.os.AsyncTask;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.ProgressBar;
import
android.widget.TextView;
import
android.widget.Toast;
public
class
MainActivity
extends
Activity {
private
Button satrtButton;
private
Button cancelButton;
private
ProgressBar progressBar;
private
TextView textView;
private
DownLoaderAsyncTask downLoaderAsyncTask;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
}
public
void
initView() {
satrtButton=(Button) findViewById(R.id.startButton);
cancelButton=(Button) findViewById(R.id.cancelButton);
satrtButton.setOnClickListener(
new
ButtonOnClickListener());
cancelButton.setOnClickListener(
new
ButtonOnClickListener());
progressBar=(ProgressBar) findViewById(R.id.progressBar);
textView=(TextView) findViewById(R.id.textView);
}
private
class
ButtonOnClickListener
implements
OnClickListener{
public
void
onClick(View v) {
switch
(v.getId()) {
case
R.id.startButton:
downLoaderAsyncTask=
new
DownLoaderAsyncTask();
downLoaderAsyncTask.execute(
"http://www.baidu.com"
);
break
;
case
R.id.cancelButton:
downLoaderAsyncTask.cancel(
true
);
break
;
default
:
break
;
}
}
}
private
class
DownLoaderAsyncTask
extends
AsyncTask<String, Integer, String>{
@Override
protected
void
onPreExecute() {
super
.onPreExecute();
textView.setText(
"调用onPreExecute()方法--->准备开始执行异步任务"
);
System.out.println(
"调用onPreExecute()方法--->准备开始执行异步任务"
);
}
@Override
protected
String doInBackground(String... params) {
System.out.println(
"调用doInBackground()方法--->开始执行异步任务"
);
try
{
HttpClient client =
new
DefaultHttpClient();
HttpGet get =
new
HttpGet(params[
0
]);
HttpResponse response = client.execute(get);
if
(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
long
total = entity.getContentLength();
ByteArrayOutputStream bos =
new
ByteArrayOutputStream();
byte
[] buffer =
new
byte
[
1024
];
int
count =
0
;
int
length = -
1
;
while
((length = is.read(buffer)) != -
1
) {
bos.write(buffer,
0
, length);
count += length;
publishProgress((
int
) ((count / (
float
) total) *
100
));
Thread.sleep(
1000
);
}
return
new
String(bos.toByteArray(),
"UTF-8"
);
}
}
catch
(Exception e) {
return
null
;
}
return
null
;
}
@Override
protected
void
onPostExecute(String result) {
super
.onPostExecute(result);
Toast.makeText(getApplicationContext(),
"调用onPostExecute()方法--->异步任务执行完毕"
,
0
).show();
textView.setText(result);
System.out.println(
"调用onPostExecute()方法--->异步任务执行完毕"
);
}
@Override
protected
void
onProgressUpdate(Integer... values) {
super
.onProgressUpdate(values);
progressBar.setProgress(values[
0
]);
textView.setText(
"已经加载"
+values[
0
]+
"%"
);
}
@Override
protected
void
onCancelled() {
super
.onCancelled();
progressBar.setProgress(
0
);
textView.setText(
"调用onCancelled()方法--->异步任务被取消"
);
System.out.println(
"调用onCancelled()方法--->异步任务被取消"
);
}
}
}
发表评论