强大的开源控件AFinal在图片加载和文件下载的应用
2015-07-29 13:03
495 查看
前言
我们都知道,网络操作是非常复杂的,像是发送http请求,加载网络图片,文件下载等等,我们当然可以自己去屑一些类来实现自己的操作,但是,使用别人已经写好的第三方框架也是一个不错的选择,这里我给大家介绍一个我比较喜欢的框架:AFinal。实现
网络图片加载我们都知道在ListView中加载图片,如果处理的不好,很容易出现OOM(内存溢出)的问题,但是,AFinal很好的解决了这些问题,我们不用担心出现内存溢出的问题。
文件下载
AFinal还提供了文件下载的功能,我们只需要传入url和下载路径即可,当然还有回调,在回调方法里面提供了onStart(),onSuccess(),onLoading(),onFailure()四个方法来供我们使用,十分方便。
下面是我提供的一个小例子,我们先看一下效果图:
源码:
public class MainActivity extends ActionBarActivity implements View.OnClickListener{ private String pic_url = "http://imgq.duitang.com/uploads/item/201403/05/20140305105955_5mhet.jpeg"; private String music_url = "http://180.96.30.14/dl.softmgr.qq.com/original/Download/ThunderSpeed1.0.29.322.exe?mkey=55b87e1943896bc4&f=2b01&p=.exe"; private ImageView iv_pic; private TextView tv_pro; private Button btn_start; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initListener(); } private void initListener() { btn_start.setOnClickListener(this); } private void initView() { iv_pic = (ImageView) findViewById(R.id.iv_pic); tv_pro = (TextView) findViewById(R.id.tv_pro); btn_start = (Button) findViewById(R.id.btn_start); } @Override public void onClick(View v) { showPic(); downloadMusic(); } //下载音乐文件 private void downloadMusic() { FinalHttp finalHttp = new FinalHttp(); //设置下载路径 String target = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Thunder.exe"; //开始下载请求 finalHttp.download(music_url, target, new AjaxCallBack<File>() { @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); toast("下载失败"); } @Override public void onStart() { super.onStart(); toast("开始下载"); } @Override public void onLoading(long count, long current) { super.onLoading(count, current); DecimalFormat format = new DecimalFormat("0.00"); String pro = format.format(current/(count*1.0)*100); tv_pro.setText("下载进度:"+pro+"%"); } @Override public void onSuccess(File file) { super.onSuccess(file); tv_pro.setText("下载成功"); } }); } //显示图片 private void showPic() { FinalBitmap finalBitmap = FinalBitmap.create(this); Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_loading); //普通加载 // finalBitmap.display(iv_pic,pic_url); //带加载动画 // finalBitmap.display(iv_pic,pic_url,bitmap); //带加载动画以及加载失败显示的图片 finalBitmap.display(iv_pic,pic_url,bitmap,bitmap); } private void toast(String msg){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); } }
代码也比较简单,这里我就不做过多的解释了,大家都可以看明白。
小结
AFinal还有其他的用途,包括Http请求和对数据库的操作,这里我们就不介绍了(因为我还没有使用这两个功能),大家有兴趣的可以自己去关注AFinal的详细信息。源码下载
AFinal的Github地址:https://github.com/yangfuhai/afinal
相关文章推荐
- [转载] 一共81个,开源大数据处理工具汇总(上)
- Web Service
- iframe应用
- python 错误处理
- openlayers3使用总结
- 安装交叉编译器arm-none-linux-gnueabi-gcc
- 安卓实习第十一天
- Unix/Linux 的 shell
- Unix/Linux 的 shell
- Unix/Linux 的 shell
- Unix/Linux 的 shell
- LoadRunner函数详解之Lr_save_string和Sprintf
- Thinkphp 3.2 Nginx 伪静态写法15年7月最新有效
- UITapGestureRecognizer会屏蔽掉Button的点击事件
- Bumblebee解决Linux显卡问题 安装过后出现运行失败问题
- android打开联系人的代码
- angular学习笔记2015728
- SQL Server中遍历表中记录的方法
- HDU 1018 Big Number
- Windows文件读写(提高读写速度)