zoukankan      html  css  js  c++  java
  • 基于Android 下载文件时,更新UI简单帮助类

    因为在项目开发时。有这种简单需求,问谷歌,网络上也有好多Utils工具类,可是比較冗余。自己就简单的写了一个简单帮助类。

    这里写图片描写叙述

    
    /**
     * 下载文件,更新UI简单帮助类
     * 
     * @author jarlen
     * 
     */
    public class DownLoadHelper
    {
        private static final int DOWN_BEGIN = 0;
        private static final int DOWN_UPDATA = 1;
        private static final int DOWN_FINISH = 2;
        private static final int DOWN_ERROR = 3;
    
        private Context mContext;
    
        private TextView mTextView;
    
        private ProgressBar mBar;
    
        private Handler handler = new Handler()
        {
            public void handleMessage(Message msg)
            {
                if (!Thread.currentThread().isInterrupted())
                {
                    switch (msg.what)
                    {
                    case DOWN_BEGIN:
                        if (mTextView != null)
                        {
                            mTextView.setText("開始下载");
                        }
    
                        if(mBar != null)
                        {
                            mBar.setProgress(0);
                        }
    
                        break;
                    case DOWN_UPDATA:
                        int factor = msg.arg1;
    
                        if (mTextView != null)
                        {
                            mTextView.setText(factor + "%");
                        }
    
                        if(mBar != null)
                        {
                            mBar.setProgress(factor);
                        }
    
                        break;
    
                    case DOWN_FINISH:
                        if (mTextView != null)
                        {
                            mTextView.setText("下载完毕");
                        }
    
                        if(mBar != null)
                        {
                            mBar.setProgress(100);
                        }
    
                        break;
                    case DOWN_ERROR:
                        if (mTextView != null)
                        {
                            mTextView.setText("下载错误");
                        }
    
                        if(mBar != null)
                        {
                            mBar.setProgress(0);
                        }
    
                        break;
    
                    default:
                        break;
                    }
                }
            };
        };
    
        public DownLoadHelper(Context context)
        {
            this.mContext = context;
        }
    
        /**
         * 设置下载时,须要更新的UI TextView
         * @param view
         */
        public void setUpdataView(TextView view)
        {
            this.mTextView = view;
        }
    
        /**
         * 设置下载时,须要更新的UI,ProgressBar
         * @param bar
         */
        public void setUpdataBar(ProgressBar bar)
        {
            this.mBar = bar;
        }
    
        /**
         * 開始下载
         * @param url
         * 文件下载地址
         * @param path
         * 文件保存地址
         */
        public void startDownLoad(final String url, final String path)
        {
    
            new Thread()
            {
                public void run()
                {
                    sendMsg(DOWN_BEGIN, 0);
                    try
                    {
                        long downloadSize = downloadUpdateFile(url, path);
                        if (downloadSize > 0)
                        {
                            sendMsg(DOWN_FINISH, 0);
                        }
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                        sendMsg(DOWN_ERROR, 0);
                    }
    
                };
            }.start();
        }
    
        private long downloadUpdateFile(String down_url, String path)
                throws Exception
        {
            int down_step = 1;// 提示step
            int totalSize;// 文件总大小
            int downloadCount = 0;// 已经下载好的大小
            int updateCount = 0;// 已经上传的文件大小
            InputStream inputStream;
            OutputStream outputStream;
            URL url = new URL(down_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url
                    .openConnection();
            httpURLConnection.setConnectTimeout(30 * 1000);
            httpURLConnection.setReadTimeout(30 * 1000);
            // 获取下载文件的size
            totalSize = httpURLConnection.getContentLength();
            if (httpURLConnection.getResponseCode() == 404)
            {
                sendMsg(DOWN_ERROR, 0);
                throw new Exception("fail!");
            }
            inputStream = httpURLConnection.getInputStream();
            File dir = new File(path);
            if (!dir.exists())
            {
                dir.mkdir();
            }
            String name = down_url.substring(down_url.lastIndexOf("/") + 1,
                    down_url.length());
    
            File updateFile = new File(dir, name);
            outputStream = new FileOutputStream(updateFile, false);// 文件存在则覆盖掉
            byte buffer[] = new byte[1024];
            int readsize = 0;
            while ((readsize = inputStream.read(buffer)) != -1)
            {
                outputStream.write(buffer, 0, readsize);
                downloadCount += readsize;// 时时获取下载到的大小
                // 每次增长1%
                if (updateCount == 0
                        || (downloadCount * 100 / totalSize - down_step) >= updateCount)
                {
                    updateCount += down_step;
                    sendMsg(DOWN_UPDATA, updateCount);
    
                }
            }
            if (httpURLConnection != null)
            {
                httpURLConnection.disconnect();
            }
            inputStream.close();
            outputStream.close();
            return downloadCount;
        }
    
        private void sendMsg(int flag, int factor)
        {
            Message msg = new Message();
            switch (flag)
            {
    
            case DOWN_BEGIN:// 開始
            case DOWN_FINISH:// 完毕
            case DOWN_ERROR:// 失败
    
                break;
            case DOWN_UPDATA:// 更新进度条
                msg.arg1 = factor;
                break;
    
            default:
                break;
            }
            msg.what = flag;
            handler.sendMessage(msg);
        }
    
    }

    使用时简单说明下。

    DownLoadHelper helper1 = new DownLoadHelper(this);
    helper1.setUpdataView(tv1);
    helper1.startDownLoad("http://img1.2345.com/appsimg/wallpaper/4/139460306960.jpg", path);

    /********************************************/

    Demo源代码下载地址
    http://download.csdn.net/detail/jarlen/8552443

    没有认真地检查。可能有bug,使用的伙伴请自己debug下。并通知我一下,谢谢

  • 相关阅读:
    Chapter 4 持久存储数据对象
    pyhton Chapter3 读文件
    python笔记1
    C#读写txt文件
    机器学习第一讲
    Json对象
    表单加载
    多列树
    Java 基础【11】@注解
    Java 基础【06】复合赋值运算
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5101942.html
Copyright © 2011-2022 走看看