android 進度條_Android更新下載進度條 | 學步園
下載文件會(huì)阻塞UI主線程,所以需要new一個(gè)新線程來(lái)執(zhí)行下載操作,通過(guò)handler執(zhí)行更新UI進(jìn)度條操作。代碼如下:
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);
}
}
}
總結(jié)
以上是生活随笔為你收集整理的android 進度條_Android更新下載進度條 | 學步園的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ajax参数中字符串最大长度_6.7 C
- 下一篇: 中兴手机数据通道打不开_中兴手机有流量,