强大的开源控件AFinal在图片加载和文件下载的应用

来源:互联网 发布:移动网络怎么样 编辑:程序博客网 时间:2024/06/05 12:42

前言

我们都知道,网络操作是非常复杂的,像是发送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

0 0
原创粉丝点击