轉自百度文檔 : 讀取網頁內容 更新進度
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
public class PageTask extends AsyncTask<String, Integer, String>{
//可變長的輸入參數 , 與AsyncTask.exucute()對應
@Override
protected String doInBackground(String... params) {
try {
HttpClient client = new DefaultHttpClient();
//params[0] 表示連接的url
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
long length = entity.getContentLength();
InputStream is = entity.getContent();
String s = null;
if(is != null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[4*32];
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));
}
Thread.sleep(100);
}
s = new String(baos.toByteArray());
//返回結果
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(String result) {
//返回HTML 頁面的內容
// message.setText(result);
}
@Override
protected void onPreExecute() {
//super.onPreExecute();
//任務啓動 , 可以在這裏顯示一個對話框 , 這裏簡單處理
//message.setText(R.string.task_started);
}
@Override
protected void onProgressUpdate(Integer... values) {
// super.onProgressUpdate(values);
//更新進度
//message.setText(values[0]);
}
}
PageTask task = new PageTask();
task.execute(url.getText().toString());