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

利用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

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测 组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测 阅读详情

相关推荐

Jupyter Notebook 命名出现“error”且运行后没反应

Jupyter Notebook 命名出现“error”且运行后没反应提前声明错误截图(方便大家看看是不是自己的错误)解决方法 提前声明 我的问题是在看到答主 @开始King的回答后才解决的,因为答主大大的文章后面有些地方不是很详细,我在这里再在King大大的基础上完善一下子 错误截图(方便大家看看是不是自己的错误) 1.命名失败,上面出现一个“error”字样 2.运行失败,无论是点击上方的运行按钮还是按快捷键shift+enter 都只会向下再增加一个代码块,而不会运行程序。 (也不是很多人出现的[*

qq_52770743的博客 1万+

Afinal架构的简单使用

一、Afinal简介。1.Afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。Xutils基于Afinal开发,稳定性更强。2.Afinal项目地址。http://www.oschina.net/p/afinal/二、Afinal使用步骤。1.导入jar包。2.添...

fuge2008的博客 2193

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1731

Afinal加载网络图片及下载文件使用方法

Afinal快速开发框架使用起来非常方便,下面将讲解如何利用Afinal加载网络图片及下载文件: 先看效果图: 注意:使用Afinal前需添加Afinal的jar,可以在这里下载:http://download.youkuaiyun.com/detail/baiyuliang2013/7313587 其中包括了Afinal的源码和jar,使用时只需添加jar包即可,在学习阶段也可以直接添加源码到

白玉梁的专栏 6132

开源Agent Skill让AI画图不再翻车:从数据到专业图表全流程

在人工智能与数据可视化交叉领域,让模型直接生成图表往往伴随字体乱码、坐标轴密集、配色失调等高频问题。Agent Skill作为一种可复用的能力封装机制,将专业绘图流程固化为标准化操作手册,从数据特征识别、图表类型决策到代码生成与渲染校验形成完整闭环。它不再依赖临时提示词的一次性发挥,而是让AI按领域专家的思维执行任务,显著提升出图质量与稳定性。这种能力在数据分析报告、运营日报、论文插图等场景具有广泛实用价值,尤其适用于需要快速产出规范化图表的工作流。本文即从这一技术范式出发,介绍一个GitHub上获得2.5

weixin_33851429的博客 952

2025年GESP12月认证C++四级真题解析

摘要 本文包含11道C++编程题目,涵盖指针、数组、函数参数传递、结构体和排序算法等知识点。每题2分,总分30分,主要考察学生对C++基础语法的掌握程度。题目包括指针定义与解引用(第1-4题)、二维/三维数组遍历(第4-5题)、变量作用域(第6题)、函数传参方式(第7题)、结构体操作(第8题)、递归算法(第9题)和排序稳定性判断(第10题)。最后第11题要求补全选择排序算法代码片段。每道题均提供标准答案和详细解析,适合用于检验C++基础知识的掌握情况。

lan_in的博客 317

Android快速开源框架--afinal

Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。 目前Afinal主

Geek马走日 2633

EtherCAT主站教程3--适配伺服驱动器(模式配置)

目前通用的伺服驱动器的位置模式、速度模式以及其他模式是伺服系统中常见的控制模式,切换这些模式通常需要根据具体的伺服驱动器型号和控制协议(如EtherCAT、CANopen、Modbus等)进行配置。以下是这些模式的概述及切换方法的一般性指导:协议规范中,一共有以下几种模式:其中模式1、3、6对于比较常用,也更容易上手。

weixin_52626887的博客 793

利用FinalHttp下载上传文件

文件下载

Android_jiang的博客 2528

【大模型学习】第二十四章 生成式人工智能(GAI)简介

‌的AI技术,其核心目标是通过学习数据中的规律,生成与训练数据类似但全新的文本、图像、音频、视频甚至代码。生成式人工智能(GAI)是一类能够‌。

以实战经验介绍行业知识 1637

STM32_HAL库—PWM产生指定个数

(一)CubeMX设置: 1. 晶振配置(72M) 2. 引脚配置 3. 中断配置 4. 配置及实现方式 由上推出公式: 机器周期: (72MHz / 36) = 2MHz = 0.5us PWM周期: 0.5 * 100 = 50us = 20kHz 5. 主函数调用PWM函数 HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_2); //此处一句后可直接进入中断 6. PWM溢出回调函数 void HAL_TIM_PWM_PulseFinished

5526

常见Android开源框架使用笔记之——afinal框架

培养自己的框架意识,我们从开源开始。

骑猪追大象 6548

【地图模块算法】二维全局地图的开源方案及对比--gmapping、hector、karto、cartographer

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、gmapping算法建图【基于Raoo-Blackwellized粒子滤波(RBPF)算法】1.gmapping理论(1)gmapping的工作原理(2)gmapping的算法流程(3)gmapping论文理论2.gmappingROS工程框架解析(1)gmapping的功能包架构(2)gmapping订阅和发布的话题(3)gmapping算法建图参数(4)gmapping源码

qq_35635374的博客 3437

Afinal

1.简介 afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。在android应用开发中,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afinal的orm框架,无需任何配置信息,一行代码就可以对android的sqlite数据库进行增删改查操作。同时,afinal内嵌了finalHttp等简单易用的工具,可以轻松...

weixin_30545285的博客 180

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

xUtils详解

1. xUtils详解 xUtils是基于Afinal开发的目前功能比较完善的一个android开源框架 xUtils包含了orm、http(s)、image、view注解。 基于高效稳定的orm工具,http模块得以更加方便的实现cookie(支持domain、path、expiry)和缓存(Cache-Control、Last-Modified、ETag)的支持。 有强大的http及其下载缓...

Stc_LOokIN的博客 1393

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

初学者必备Android 开发框架

今天以Android初学者的身份我也试着整理一下Android开发中常用到的一些框架,就当是学习成果,其实多半也是从网上搜的,然后做了一个汇总。那咱就开始吧:   一、AndroidAnnotations 描述:AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。使代码更加精简,使项目更加容易维护,它的目标就是“Fast A

中国程序员的希望 1668

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【小超_Android】2014年框架类源码年度精品汇总

Android快速开发框架LoonAndroid 下载地址:http://www.dwz.cn/zOEmz 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承了基本上现在所有的http请求) (4) eventbus(集成一个开源的框架) (5

青涩丶年华 814

Android xUtils3使用

一、xUtils简介: xUtils是基于Afinal开发的目前功能比较完善的一个Android开源框架,官网:https://github.com/wyouflf/xUtils3 xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展: 稳定的基石: AbsTask和统一的回调接口Callback, 任何异常...

Cricket_7的博客 211

【Android】2014年框架类源码年度精品汇总

Android快速开发框架LoonAndroid 下载地址:http://www.devstore.cn/code/info/74.html 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承了基本上现在所有的http请求) (4) eventb

Nature_Day的专栏 762

Android开发框架汇总

今天以Android初学者的身份我也试着整理一下Android开发中常用到的一些框架,就当是学习成果,其实多半也是从网上搜的,然后做了一个汇总。那咱就开始吧:    一、AndroidAnnotations 描述:AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。使代码更加精简,使项目更加容易维护,它的目标就是“Fast Andr

with的博客 287

Android快速开发框架LoonAndroid

Android快速开发框架LoonAndroid 下载地址:http://www.devstore.cn/code/info/74.html 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) (3) 网络请求模块(继承了基本上现在所有的http请求) (4) eventb

飞上北极星 1442

[代码分享] 2014年框架类源码年度精品汇总

Android快速开发框架LoonAndroid主要有以下模块:(1) 自动注入框架(只需要继承框架内的application既可)(2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)(3) 网络请求模块(继承了基本上现在所有的http请求)(4) eventbus(集成一个开源的框架)(5) 验证框架(集成开源框架)(6) json解析(支持解析成集合或者对象)(7) 数据库(不...

宝爷的专栏 745

android自己用到的第三方库汇总

Android的开发性,使得第三方开源的库也非常的多,现在讲自己学习中用的库总结一些: 1:侧滑菜单:SlidingMenu  SlidingMenu 滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕左右划出,支持菜单zoom、scale、slide up三种动画样式出现。 项目地址:https://github.com/jfeinstein10/SlidingMenu 2:图片缓存,

Kisshuohuo的博客 582

Android 6种快速开发框架

https://github.com/wyouflf/xUtils

aoshiwenrou的专栏 925

【Android】精品框架类源码汇总

手里一些框架类源码,还不错,分享给大家,希望大家有用吧

622

Android Afianl框架(序)

其实这个框架,我也是无意中发现,觉得挺好。所以想进一步学习一下这里面的东西。 Afinal介绍: afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。 在android应用开发中,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过 afinal的orm框架,无需任何配置信息,一行代码就可以对android的sqli...

weixin_34128501的博客 120
上一篇: 自定义Notification添加点击事件
下一篇: Jsoup解析HTML获取数据
潘建成
博客等级 码龄12年 139粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值