我自己做了个文件下载的例子
然后我想加个进度条显示已下载多少
可是进度条只有在下载完成的时候才会显示满了再下载中一直是空的
还有就是当文件稍微大一点就算不出下载的百分比开始一直0%突然下完了就到100%了
- Java code
package a.a;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;public class a extends Activity { Button b; OutputStream output;// 输入出流 ProgressBar bar; HandlerThread ht; myHandler h; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) findViewById(R.id.btn); bar = (ProgressBar) findViewById(R.id.bar); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { // 创建URL 写入下载地址 URL url = new URL( "http://e.zte.com.cn/pub/bbs/upload/2012/05/11/18688264685914.flv"); // 创建HttpURLConnection HttpURLConnection urlcon = (HttpURLConnection) url .openConnection(); // 获得文件大小 long TotalSize = Long.parseLong(urlcon .getHeaderField("Content-Length")); // 获得文件大小 int fileLength = urlcon.getContentLength(); // 获得输入流 InputStream is = urlcon.getInputStream(); // 创建目录 File dir = new File("/mnt/sdcard/abc"); dir.mkdir(); // 创建文件 File file = new File("/mnt/sdcard/abc/asd.flv"); // 如果存在则删除 if(file.exists()) file.delete(); // 创建文件 file.createNewFile(); // 创建文件输入流 output = new FileOutputStream(file); byte buffer[] = new byte[4 * 1024]; int size = 0; ht = new HandlerThread("down"); ht.start(); h = new myHandler(ht.getLooper()); bar.setVisibility(View.VISIBLE); int aaa = fileLength / (1024 * 2); while((is.read(buffer)) != -1) { output.write(buffer); size++; Message m = h.obtainMessage(); m.arg1 = (size / aaa) * 100; m.sendToTarget(); } // 清除缓存 output.flush(); } catch(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { // 关闭输出流 output.close(); } catch(Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }); } class myHandler extends Handler { public myHandler(Looper looper) { super(looper); } boolean VISIBLE = false; @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if(!VISIBLE) { bar.setVisibility(View.VISIBLE); VISIBLE = true; } bar.setProgress(msg.arg1); } }}