ProgressDialog+Thread實現進度條非同步載入
阿新 • • 發佈:2019-01-30
實現流程
1、彈出進度條對話方塊
2、 執行執行緒,線上程中實現資料非同步載入
3、線上程資料載入完成後,呼叫Handler並集合資料,更新介面
實現功能程式碼例子:
//新增非同步操作
m_Dialog=ProgressDialog.show(m_context, "請等待...", "正在下載安裝檔案,請稍後...",true);
//mRegsiterHandler.sleep(100);
new Thread(new Runnable(){
@Override
public void run() {
//載入資料
result=0;
try{
//下載檔案
String url="http://00.00.00.00:80/nationaltest.html";
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse response;
response = client.execute(get);
HttpEntity entity = response.getEntity();
long length = entity.getContentLength();
InputStream is = entity.getContent();
FileOutputStream fileOutputStream = null;
if (is != null) {
File file = new File(Environment.getExternalStorageDirectory(), "nationaltest.apk");
fileOutputStream = new FileOutputStream(file);
byte[] buf = new byte[1024];
int ch = -1;
while ((ch = is.read(buf)) != -1) {
fileOutputStream.write(buf, 0, ch);
}
}
fileOutputStream.flush();
if (fileOutputStream != null) {
fileOutputStream.close();
}
result=2;
}
catch(Exception ex){
result=-1;
}
//更新介面
mHandler.post(new Runnable() {
public void run() {
if(result==2)
install();
else
Toast.makeText(m_context, "下載檔案失敗,請檢查網路連線", Toast.LENGTH_SHORT).show();
}
});
m_Dialog.dismiss();
}}).start();
}