1. 程式人生 > >ProgressDialog+Thread實現進度條非同步載入

ProgressDialog+Thread實現進度條非同步載入

實現流程

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();
              }