您的位置:首页 > 移动开发 > Android开发

Android更新下载进度条

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

[java]
view plaincopyprint?

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

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: