android 進度條_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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值