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