Android更新下载进度条

下载文件会阻塞UI主线程,所以需要new一个新线程来执行下载操作,通过handler执行更新UI进度条操作。代码如下:

public class AndroidTest extends Activity {   
    private static final String TAG = "AndroidTest";   
 
    private ProgressBar progressBar = null;   
    private Button startButton = null;   
    private EditText filenameText = null;   
    private MyHandler handler = null;   
 
    private Message message = null;   
    private boolean flag = true;   
    private int size = 1;   
   private int hasRead = 0;   
    private int len = 0;   
    private byte buffer[] = new byte[1024*4];   
    private int index = 0;    
       
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
           
        progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);   
        startButton = (Button)findViewById(R.id.mybutton);   
        startButton.setOnClickListener(new ButtonClick());   
       
        filenameText = (EditText)findViewById(R.id.fileNameID);   
       
      handler = new MyHandler();   
   }   
  
  
    public boolean downloadFile(final String urlStr, final String filename) {   
       new Thread(new Runnable(){     
           public void run() {    
               try {   
                   URL url = new URL(urlStr);   
                   HttpURLConnection connection = (HttpURLConnection)url.openConnection();   
                   size = connection.getContentLength();   
                    InputStream inputStream = connection.getInputStream();   
                   OutputStream outputStream = new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+filename);   
                       
                    while((len=inputStream.read(buffer))!=-1){   
                       outputStream.write(buffer);   
                       hasRead+=len;   
                        index = (int)(hasRead*100)/size;   
                      message = new Message();   
                        message.what = 1;   
                       handler.sendMessage(message);   
                        Log.d(TAG, "index = " + index);   
                        System.out.println("has = "+hasRead+" size = "+size+" index = "+index);   
                  }   
                   
                   inputStream.close();   
                   outputStream.close();   
               } catch (Exception e) {   
                   flag = false;   
                   e.printStackTrace();   
                }   
           }   
       }).start();   
           
        return flag;   
    }   
  
    class ButtonClick implements OnClickListener {   
  
        public void onClick(View v) {   
       
            String url = filenameText.getText().toString();   
            String filename = url.substring(url.lastIndexOf('/') + 1);   
            Log.d(TAG, "url = " + url);   
            Log.d(TAG, "filename = " + filename);   
              
           if(!downloadFile(url, filename)) {   
               String rs = "下载失败 ";   
                Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();   
           }   
      
        }   
  
    }   
  
    class MyHandler extends Handler{   
  
       @Override  
        public void handleMessage(Message msg) {   
            if (msg.what == 1) {   
               progressBar.setProgress(index);   
               Log.d(TAG, "setProgress index:" + index);   
               if (index >= 99) {   
                   String rs = "下载完成";   
                   Toast.makeText(AndroidTest.this, rs, Toast.LENGTH_SHORT).show();   
                }   
            }   
              
           super.handleMessage(msg);   
       }   
  
    }   
  
}  



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值