• 下载进度条


    引用:http://www.pocketdigi.com/20100916/110.html

    布局XML:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  android:id="@+id/tv"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text=""
        />
    <ProgressBar android:id="@+id/down_pb"
    	android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:max="100"
        style="?android:attr/progressBarStyleHorizontal"
    />
    </LinearLayout>

    这个就不用解释了吧,两个控件,一个是TextView,一个是横向条状进度条
    程序main.java:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    
    package com.pocketdigi.download;
     
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;
     
    import org.apache.http.client.ClientProtocolException;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;
     
    public class main extends Activity {
        /** Called when the activity is first created. */
    	ProgressBar pb;
    	TextView tv;
    	int   fileSize;
    	int   downLoadFileSize;
    	String fileEx,fileNa,filename;
    	private Handler handler = new Handler()
    	  {
    	    @Override
    	    public void handleMessage(Message msg)
    	    {//定义一个Handler,用于处理下载线程与UI间通讯
    	      if (!Thread.currentThread().isInterrupted())
    	      {
    	        switch (msg.what)
    	        {
    	          case 0:
    	            pb.setMax(fileSize);
    	          case 1:
    	            pb.setProgress(downLoadFileSize);
    	            int result = downLoadFileSize * 100 / fileSize;
    	            tv.setText(result + "%");
    	            break;
    	          case 2:
    	            Toast.makeText(main.this, "文件下载完成", 1).show();
    	            break;
     
    	          case -1:
    	            String error = msg.getData().getString("error");
    	            Toast.makeText(main.this, error, 1).show();
    	            break;
    	        }
    	      }
    	      super.handleMessage(msg);
    	    }
    	  };
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            pb=(ProgressBar)findViewById(R.id.down_pb);
            tv=(TextView)findViewById(R.id.tv);
            new Thread(){
            	public void run(){
            		try {
    					down_file("http://wallpaper.pocketdigi.com/upload/1/bigImage/1284565196.jpg","/sdcard/");
    					//下载文件,参数:第一个URL,第二个存放路径
    				} catch (ClientProtocolException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
            	}
            }.start();
     
     
        }
        public void down_file(String url,String path) throws IOException{
        	//下载函数   	
        	filename=url.substring(url.lastIndexOf("/") + 1);
        	//获取文件名
        	URL myURL = new URL(url);
        	URLConnection conn = myURL.openConnection();
        	conn.connect();
        	InputStream is = conn.getInputStream();
    	    this.fileSize = conn.getContentLength();//根据响应获取文件大小
    	    if (this.fileSize <= 0) throw new RuntimeException("无法获知文件大小 ");
    	    if (is == null) throw new RuntimeException("stream is null");
    	    FileOutputStream fos = new FileOutputStream(path+filename);
    	    //把数据存入路径+文件名
    	    byte buf[] = new byte[1024];
    	    downLoadFileSize = 0;
    	    sendMsg(0);
    	    do
    	      {
    	    	//循环读取
    	        int numread = is.read(buf);
    	        if (numread == -1)
    	        {
    	          break;
    	        }
    	        fos.write(buf, 0, numread);
    	        downLoadFileSize += numread;
     
    	        sendMsg(1);//更新进度条
    	      } while (true);
    	    sendMsg(2);//通知下载完成
    	    try
    	      {
    	        is.close();
    	      } catch (Exception ex)
    	      {
    	        Log.e("tag", "error: " + ex.getMessage(), ex);
    	      }
     
        }
    	private void sendMsg(int flag)
    	{
    	    Message msg = new Message();
    	    msg.what = flag;
    	    handler.sendMessage(msg);
    	}	 
     
     
    }

    源代码:
    Android DownloadFile (1966)
  • 相关阅读:
    java 线程之间的协作 wait()与notifyAll()
    加密web.config中的邮件配置mailSettings
    TCP编程,Socket通讯
    jQuery插件学习笔记
    抹掉Scala的糖衣(14) -- Update Method
    UVA 12034 Race (递推神马的)
    struts2 命名空间 namespace 学习
    Vim -&gt; 移动光标
    【跟我一步一步学Struts2】——Struts2工作流程
    Python中sort以及sorted函数初探
  • 原文地址:https://www.cnblogs.com/sode/p/2191636.html
Copyright © 2020-2023  润新知