Android更新下載進度條

來源:互聯網
上載者:User

下載檔案會阻塞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);        }    }}

轉:http://blog.csdn.net/ameyume/article/details/6183462

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.