afinal框架实现图片的异步缓存加载(烟台杰瑞教育Android培训部原创).docx_第1页
afinal框架实现图片的异步缓存加载(烟台杰瑞教育Android培训部原创).docx_第2页
afinal框架实现图片的异步缓存加载(烟台杰瑞教育Android培训部原创).docx_第3页
afinal框架实现图片的异步缓存加载(烟台杰瑞教育Android培训部原创).docx_第4页
afinal框架实现图片的异步缓存加载(烟台杰瑞教育Android培训部原创).docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 Android批量图片加载经典系列afinal框架实现图片的异步缓存加载一、问题描述在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存加载,接下来我们再介绍一下afinal 框架的使用。Afinal 是一个android的http框架、sqlite orm 和 ioc 框架。使其更加简单易用,Afinal的宗旨是简洁,快速。约定配置的方式之后,尽量一行代码完成所有事情,代码入侵性小,在三者中比较推荐。在这里我们主要使用http框架的 FinalHttp和FinalBitmap组件实现网络图片的加载案例介绍实现图片新闻浏览:二、案例主要组件1、FinalHttp使用方法:FinalHttp fh=new FinalHttp();(1)发送Post方式请求 fh.post(url, new AjaxCallBack() Override public void onFailure(Throwable t, String strMsg) /请求失败调用 super.onFailure(t, strMsg); Override public void onLoading(long count, long current) /请求过程中没一秒回调一次 super.onLoading(count, current); Override public void onStart() /开始异步请求时调用 super.onStart(); Override public void onSuccess(String t) /请求成功调用,并接受返回结果 );(2)发送Get方式请求fh.get(url, callBack);用法同Post方式(3)下载文件方法参数分别表示下载文件的url、文件保存目标、AjaxCallBack回调方法fh.download(url, /mnt/sdcard/21-sun.apk, new AjaxCallBack() Override public void onLoading(long count, long current) / TODO Auto-generated method stub tvProcess.setText(下载进度+(current/count); Override public void onSuccess(File f) /请求成功调用,并接受返回结果 tvFileName.setText(f=null?:f.getAbsoluteFile().toString(); );2、向服务端传递参数AjaxParams params=new AjaxParams();/设置请求参数params.put(category, today);调用fh.get(url,params,ajaxCallback)或fh.post(url,params,ajaxCallback)方法传递数据jsp服务端通过request.getParameter(“category”);获得文本参数也可上传文件params.put(“profile_picture”,new File(“/mnt/sdcard/head.jpg”)或params.put(“profile_picture”,InputStream);服务端可使用commfileupload组件实现上传3、FinalBitmap实现缓存并异步加载网络图片 /创建FinalBitmap,并设置文件缓存的位置、内存缓存的百分比(如:系统内存的1/8) FinalBitmap fb=FinalBitmap.create(this, diskCachePath, memoryCacheSizePercent); /进行配置,可不设置 fb.configLoadingImage(R.drawable.default_big);/设置图片正在加载的时候显示的图片fb.configLoadfailImage(R.drawable.error_big);/设置图片加载失败时候显示的图片配置方法还有:configBitmapMaxHeight(int bitmapHeight) / 配置默认图片的最大的高度 configBitmapMaxWidth(int bitmapWidth) / 配置默认图片的最大的宽度 configDisplayer(Displayer displayer)/设置显示器,比如在显示的过程中显示动画等 /设置下载器,比如通过ftp或者其他协议去网络读取图片的时候可以设置这项configDownlader(Downloader downlader) 最后调用display()完成图片的加载: /第一参数表示显示图片的UI,第二参数为图片网络地址fb.display(view,url);/加载图片,先从缓存中加载,内存没有再从网络加载 三、案例完整代码1、SunNewsApplication组件public class SunNewsApplication extends Application private FinalBitmap fb; Override public void onCreate() fb=FinalBitmap.create(this); fb.configLoadingImage(R.drawable.default_big);/ 设置图片正在加载的时候显示的图片 public FinalBitmap getFinalBitmap() return fb; 2、编写适配器public class MoreStyleNewsListViewAdapter extends BaseAdapter private Activity mActivity; private List newsList; private FinalBitmap imageLoader; public MoreStyleNewsListViewAdapter(Activity mActivity,List newsList) this.mActivity=mActivity; this.newsList=newsList; imageLoader=(SunNewsApplication)mActivity.getApplication().getFinalBitmap(); private final int TYPE_COUNT=2; /* * 返回数据项的显示类型数据 * 0 1 2 */ Override public int getItemViewType(int position) / TODO Auto-generated method stub return newsList!=null?newsList.get(position).getStyle():-1; /* * 返回类型个数 */ Override public int getViewTypeCount() / TODO Auto-generated method stub return TYPE_COUNT; Override public int getCount() / TODO Auto-generated method stub Log.d(jereh,getCount(); return newsList.size(); Override public Object getItem(int position) / TODO Auto-generated method stub Log.d(jereh,getItem(); return newsList.get(position); Override public long getItemId(int position) / TODO Auto-generated method stub Log.d(jereh,getItemId(); return position; Override public View getView(int position, View convertView, ViewGroup parent) / TODO Auto-generated method stub ViewHolder holder=null; NewsItem item=newsList.get(position); if(convertView=null) holder=new ViewHolder(); /将layout.xml转换为View switch(item.getStyle() case 0: convertView=LayoutInflater.from(mActivity).inflate(R.layout.news_item1, null); holder.ivImg1=(ImageView)convertView.findViewById(R.id.ivNewsImg); break; case 1: convertView=LayoutInflater.from(mActivity).inflate(R.layout.news_item2, null); holder.ivImg1=(ImageView)convertView.findViewById(R.id.ivImg1); holder.ivImg2=(ImageView)convertView.findViewById(R.id.ivImg2); holder.ivImg3=(ImageView)convertView.findViewById(R.id.ivImg3); break; holder.tvTilte=(TextView)convertView.findViewById(R.id.tvTitle); convertView.setTag(holder);/记录个标识 else holder=(ViewHolder)convertView.getTag(); /向ui元素绑定数据 holder.tvTilte.setText(item.getTitle(); imageLoader.display(holder.ivImg1, item.getImgUrl()0);/加载图片,先从缓存中加载,内存没有再从网络加载 switch(item.getStyle() case 1: imageLoader.display(holder.ivImg2, item.getImgUrl()1);/加载图片,先从缓存中加载,内存没有再从网络加载 imageLoader.display(holder.ivImg3, item.getImgUrl()2);/加载图片,先从缓存中加载,内存没有再从网络加载 break; Log.d(jereh,getView(); return convertView; private class ViewHolder private TextView tvTilte; private ImageView ivImg1; private ImageView ivImg2; private ImageView ivImg3; 3、编写MaintActivitypublic class MainActivity extends Activity private RadioGroup rgChannel; private List newsList=new ArrayList(); private MoreStyleNewsListViewAdapter adapter; private ListView newsListView; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); initView(); requestData(); private void initView() rgChannel=(RadioGroup)super.findViewById(R.id.rgChannel); rgChannel.check(R.id.rbToday); newsListView=(ListView)super.findViewById(R.id.lvNews); adapter=new MoreStyleNewsListViewAdapter(this,newsList); newsListView.setAdapter(adapter); /* * 异步请求获得网络数据 */ private void requestData()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论