您的位置:首页 > 产品设计 > UI/UE

基于Android 下载文件时,更新UI简单帮助类

2015-04-01 01:46 429 查看
由于在项目开发时,有这样的简单需求,问谷歌,网络上也有好多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);


/[b]********************************************[/b]/

Demo源码下载地址

http://download.csdn.net/detail/jarlen/8552443

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐