package com.example.test;
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.content.Context;
import android.os.AsyncTask;
import android.util.Log;
public class TestAsyncTask extends AsyncTask<String, Integer, String> {
private static final String TAG = TestAsyncTask.class.getSimpleName();
private Context ctx;
AsyncTaskCallback cb = null;
public static final int PRE_EVENT = 1;
public static final int POST_EVENT = 2;
public static final int CACEL_EVENT = 3;
public static interface AsyncTaskCallback {
// 显示结果
void onAsyncResult(int e, String s);
// 显示进度条
void onAsyncProcess(Integer pi);
}
public TestAsyncTask(Context ctx, AsyncTaskCallback cb) {
super();
this.ctx = ctx;
this.cb = cb;
}
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute called");
cb.onAsyncResult(PRE_EVENT, "loading...");
}
// doInBackground方法内部执行后台任务
@Override
protected String doInBackground(String... params) {
Log.i(TAG, "doInBackground called: params : " + params[0]);
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 baos = new ByteArrayOutputStream();
byte[] buf = new byte[512];
int count = 0;
int length = -1;
while ((length = is.read(buf)) != -1) {
baos.write(buf, 0, length);
count += length;
// 调用publishProgress公布进度,最后onProgressUpdate方法将被执行
publishProgress((int) ((count / (float) total) * 100));
// 为了演示进度条,休眠100毫秒
Thread.sleep(100);
}
return new String(baos.toByteArray(), "utf-8");
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String result) {
Log.i(TAG, "onPostExecute called: result : " + result);
cb.onAsyncResult(POST_EVENT, result);
}
@Override
protected void onCancelled() {
Log.i(TAG, "onCancelled called");
cb.onAsyncResult(CACEL_EVENT, "cancle...");
}
@Override
protected void onProgressUpdate(Integer... values) {
Log.i(TAG, "onProgressUpdate called progress:" + values[0]);
cb.onAsyncProcess(values[0]);
}
}
AsyncTaskCallback cb = new AsyncTaskCallback() {
@Override
public void onAsyncResult(int e, String s) {
Log.i(TAG, "onAsyncResult event:" + e + " result:" + s);
Message msg = Message.obtain();
msg.what = 1;
msg.arg1 = e;
msg.obj = (Object) s;
testH.sendMessage(msg);
}
@Override
public void onAsyncProcess(Integer pi) {
Message msg = Message.obtain();
msg.what = 2;
msg.obj = (Object) pi;
testH.sendMessage(msg);
}
};