Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 基於Android 下載文件時,更新UI簡單幫助類

基於Android 下載文件時,更新UI簡單幫助類

編輯:關於Android編程

由於在項目開發時,有這樣的簡單需求,問谷歌,網絡上也有好多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);

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved