Afinal快速开发框架使用起来非常方便,下面将讲解如何利用Afinal加载网络图片及下载文件:

先看效果图:

注意:使用Afinal前需添加Afinal的jar,可以在这里下载:http://download.csdn.net/detail/baiyuliang2013/7313587

其中包括了Afinal的源码和jar,使用时只需添加jar包即可,在学习阶段也可以直接添加源码到你的项目中,可以更深入的学习Afinal。

看代码:

activit_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <Button
         android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="下载" />

       <TextView
         android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/btn"
        android:text="进度:" />

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/ic_launcher"
        />

</RelativeLayout>

MainActivity.java:

package com.example.afinaltest;

import java.io.File;

import net.tsz.afinal.*;
import net.tsz.afinal.annotation.view.ViewInject;
import net.tsz.afinal.http.AjaxCallBack;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FinalActivity {

	@ViewInject(id=R.id.img) ImageView img;
	 TextView textView;
	 Button btn;
	FinalBitmap finalBitMap=null;
	FinalHttp fh;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		textView=(TextView) findViewById(R.id.text);
		btn=(Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				String apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/qq.apk";
				File f = new File(apkPath);
				if (f.exists()) {
					f.delete();
				}
				fh=new FinalHttp();
				fh.download("http://gdown.baidu.com/data/wisegame/4ae6d2d7378e6cdf/QQ_122.apk",apkPath,
						new AjaxCallBack<File>() {
			       @Override
					public void onStart() {
						super.onStart();
						Toast.makeText(getApplicationContext(), "开始下载", Toast.LENGTH_SHORT).show();
					}
					@SuppressLint("DefaultLocale")
					@Override
					public void onLoading(long count, long current) {
						super.onLoading(count, current);
						int progress=0;
						if (current != count && current != 0) {
							progress = (int) (current / (float) count * 100);
						} else {
							progress = 100;
						}
						textView.setText("进度:"+progress+"%");
					}
					@Override
					public void onSuccess(File t) {
						super.onSuccess(t);
						Toast.makeText(getApplicationContext(), "下载完成", Toast.LENGTH_SHORT).show();
						textView.setText(t==null?"null":t.getAbsoluteFile().toString());
					}
					@Override
					public void onFailure(Throwable t, int errorNo,String strMsg) {
						super.onFailure(t, errorNo, strMsg);
						Toast.makeText(getApplicationContext(), "下载失败", Toast.LENGTH_SHORT).show();
					}
				});
			}
		});

		finalBitMap=FinalBitmap.create(MainActivity.this);

		finalBitMap.display(img, "http://meme.zenfs.com/u/a33312d2e9eaa443321f4ec716fe795a23c27c89.jpeg");

	}

}

可以看到,MainActivity是继承了FianlActivity,因此在初始化控件的时候,可以不用findViewById了,直接用注解的方式如:@ViewInject(id=R.id.img) ImageView img; @ViewInject(id=R.id.btn,click="onclick") Button btn;click事件只需写一个对应click="onclick"的方法如:public void onclick(){}即可。

分析FinallyBitmap源码可知:初始化时需调用create方法,然后再调用display(imgView,url);即可加载网络图片,也可以设置在加载完成前显示的图片等等,这个看下源代码便知,下载文件需用FinalHttp,并调用download方法,该例中使用download(String,String,AjaxCallBack<File>);方法,第一个参数是将要下载的文件路径,第二个参数为本地文件保存路径,第三个是一个回调函数,每隔一秒会调用一次,可以方便的查看文件下载进度以及文件下载情况如成功失败,下载完成等,需重写onStart,onLoading,onSuccess,onFailure等方法。

最后不要忘了在AndroidManifest.xml中添加网络访问权限和存储卡读取及写入权限:

<uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Afinal加载网络图片及下载文件使用方法的更多相关文章

  1. Android笔记之使用Glide加载网络图片、下载图片

    Glide简介 不想说太多,真的很方便:P)可以节省我不少时间 GitHub地址:https://github.com/bumptech/glide 加载网络图片到ImageView Glide.wi ...

  2. Afianl加载网络图片(续)

    上一篇已经讲了如何利用Afianl加载网络图片和下载文件,这篇文章将继续讲解使用Afinal加载网络图片的使用,主要结合listview的使用: 看效果图: listview在滑动过程中没用明显卡顿, ...

  3. iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件

    NSURLSession加载数据.下载.上传文件   NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍.   1,使用Data Task加载数据 使用全局的 ...

  4. Swift - 使用NSURLSession加载数据、下载、上传文件

    NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的sharedSession()和dataTaskWithR ...

  5. Afinal载入网络图片及下载文件用法

    Afinal高速开发框架使用起来很方便.以下将解说怎样利用Afinal载入网络图片及下载文件: 先看效果图: 注意:使用Afinal前需加入Afinal的jar,能够在这里下载:http://down ...

  6. [原创]cocos2dx加载网络图片&异步加载图片

    [动机] 之前看到一款卡牌游戏,当你要看全屏高清卡牌的时候,游戏会单独从网络上下载,本地只存了非高清的,这样可以省点包大小,所以我萌生了实现一个读取网络图片的类. [联想] 之前浏览网页的时候经常看到 ...

  7. Android三种基本的加载网络图片方式(转)

    Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...

  8. 用Volley让GridView加载网络图片

    一.布局文件 总共两个布局文件,一个是GridView,还有一个是GridView的item,是NetworkImageView和TextView activity_main.xml <Rela ...

  9. UIImageView异步加载网络图片

    在iOS开发过程中,经常会遇到使用UIImageView展现来自网络的图片的情况,最简单的做法如下: 去下载https://github.com/rs/SDWebImage放进你的工程里,加入头文件# ...

随机推荐

  1. burp的dns记录功能

    写个备忘. 先点copy复制url,然后生成的url就能用了. 一关就没了,比较鸡肋些,不适合持久的,适合马上就能见效果的那种.

  2. 【bzoj4011 hnoi2015】落忆枫音

    题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...

  3. hdu 5314 动态树

    Happy King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  4. poj 1704 Georgia and Bob(阶梯博弈)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9363   Accepted: 3055 D ...

  5. UDA机器学习基础—交叉验证

    交叉验证的目的是为了有在训练集中有更多的数据点,以获得最佳的学习效果,同时也希望有跟多的测试集数据来获得最佳验证.交叉验证的要点是将训练数据平分到k个容器中,在k折交叉验证中,将运行k次单独的试验,每 ...

  6. Java8的重要新特性

    一.Lambda表达式 java8中Lambda表达式的书写方式: (参数) -> 表达式 (参数) -> 单行语句 (参数) -> { 语句 } 1.Lambda遍历List和Ma ...

  7. jquery 跨域请求数据问题

    昨天参加了一个前端的面试,被问到一个跨域请求数据问题,我们之前一直用的是apicloud的api进行请求的,跨域是被apicloud封装起来的,也就没有注意跨域请求数据的问题.当被问到用jquery跨 ...

  8. Python小代码_14_交换 2 个变量的 3 种方式

    a = 4 b = 5 #第一种 c = a a = b b = c print(a, b) #输出结果 #5 4 #第二种 a = a + b b = a - b a = a - b print(a ...

  9. SUSE11虚拟机安装与Oracle 11g安装

    SUSE11虚拟机安装与Oracle 11g安装 本文中所需所有参数均位于文末附录中 新建虚拟机,选择SUSE11 64位 启动虚拟机后,选择第二项安装 选择语言 跳过CD检查 选择全新安装 选择默认 ...

  10. 02 基础设施/Gitlab - DevOps之路

    基础设施/Gitlab - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 源代码管理器选用Gitlab,新版(2 ...