基于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下。并通知我一下,谢谢

posted @ 2016-01-05 12:29  phlsheji  阅读(248)  评论(0编辑  收藏  举报