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

前言

我们都知道,网络操作是非常复杂的,像是发送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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值