上篇中叙述了Afinal的finalDB和finalActivity的用法,接下来讲FinalHttp和FinalBitmap。
FinalHttp的使用方法:
FinalHttp 对 HttpClient再次封装,最简洁的就是增加了许多回调的方法,对Get 和 Post 请求进行了简化。此外还有put,delete和download方法。另外一点就是FinalHttp加入线程池操作,默认的Http请求池连接为3。下面是为FinalHttp可配置的操作.
FinalHttp finalHttp = new FinalHttp(); finalHttp.addHeader("Accept-Charset", "UTF-8");//配置http请求头 finalHttp.configCharset("UTF-8"); finalHttp.configCookieStore(null); finalHttp.configRequestExecutionRetryCount(3);//请求错误重试次数 finalHttp.configSSLSocketFactory(null); finalHttp.configTimeout(5000);//超时时间 finalHttp.configUserAgent("Mozilla/5.0");//配置客户端信息
源码中的get请求:
// ------------------get 请求----------------------- public void get(String url, AjaxCallBack<? extends Object> callBack) { get(url, null, callBack); } public void get(String url, AjaxParams params, AjaxCallBack<? extends Object> callBack) { sendRequest(httpClient, httpContext, new HttpGet(getUrlWithQueryString(url, params)), null, callBack); } public void get(String url, Header[] headers, AjaxParams params, AjaxCallBack<? extends Object> callBack) { HttpUriRequest request = new HttpGet(getUrlWithQueryString(url, params)); if (headers != null) request.setHeaders(headers); sendRequest(httpClient, httpContext, request, null, callBack); }
上述有三个get方法,不同之处在于参数的不同,先看最简单的get方法使用:
FinalHttp fh = new FinalHttp(); fh.get("http://www.yangfuhai.com", new AjaxCallBack(){ @Override public void onLoading(long count, long current) { //每1秒钟自动被回调一次 textView.setText(current+"/"+count); } @Override public void onSuccess(String t) { textView.setText(t==null?"null":t); } @Override public void onStart() { //开始http请求的时候回调 } @Override public void onFailure(Throwable t, String strMsg) { //加载失败的时候回调 } });
上述get方法中有两个参数,一为访问的路径,一个为回调函数,请求后的相应操作可以在回调函数中处理。
源码中的post请求:
// ------------------post 请求----------------------- public void post(String url, AjaxCallBack<? extends Object> callBack) { post(url, null, callBack); } public void post(String url, AjaxParams params, AjaxCallBack<? extends Object> callBack) { post(url, paramsToEntity(params), null, callBack); } public void post(String url, HttpEntity entity, String contentType, AjaxCallBack<? extends Object> callBack) { sendRequest(httpClient, httpContext, addEntityToRequestBase(new HttpPost(url), entity), contentType, callBack); } public <T> void post(String url, Header[] headers, AjaxParams params, String contentType, AjaxCallBack<T> callBack) { HttpEntityEnclosingRequestBase request = new HttpPost(url); if (params != null) request.setEntity(paramsToEntity(params)); if (headers != null) request.setHeaders(headers); sendRequest(httpClient, httpContext, request, contentType, callBack); } public void post(String url, Header[] headers, HttpEntity entity, String contentType, AjaxCallBack<? extends Object> callBack) { HttpEntityEnclosingRequestBase request = addEntityToRequestBase( new HttpPost(url), entity); if (headers != null) request.setHeaders(headers); sendRequest(httpClient, httpContext, request, contentType, callBack); }
同get方法一样,不同之处也在于参数。简单post方法应用:
AjaxParams params = new AjaxParams(); params.put("username", "michael yang"); params.put("password", "123456"); params.put("email", "test@tsz.net"); params.put("profile_picture", new File("/mnt/sdcard/pic.jpg")); // 上传文件 params.put("profile_picture2", inputStream); // 上传数据流 params.put("profile_picture3", new ByteArrayInputStream(bytes)); // 提交字节流 FinalHttp fh = new FinalHttp(); fh.post("http://www.yangfuhai.com", params, new AjaxCallBack(){ @Override public void onLoading(long count, long current) { textView.setText(current+"/"+count); } @Override public void onSuccess(String t) { textView.setText(t==null?"null":t); } });
这就是ainalhttp的get和post方法的应用,此外使用比较多的一个方法是download。
来看download的源码:
// ---------------------下载--------------------------------------- public HttpHandler<File> download(String url, String target, AjaxCallBack<File> callback) { return download(url, null, target, false, callback); } public HttpHandler<File> download(String url, String target, boolean isResume, AjaxCallBack<File> callback) { return download(url, null, target, isResume, callback); } public HttpHandler<File> download(String url, AjaxParams params, String target, AjaxCallBack<File> callback) { return download(url, params, target, false, callback); } public HttpHandler<File> download(String url, AjaxParams params, String target, boolean isResume, AjaxCallBack<File> callback) { final HttpGet get = new HttpGet(getUrlWithQueryString(url, params)); HttpHandler<File> handler = new HttpHandler<File>(httpClient, httpContext, callback, charset); handler.executeOnExecutor(executor, get, target, isResume); return handler; }
download的简单应用:
FinalHttp fh = new FinalHttp(); //调用download方法开始下载 HttpHandler handler = fh.download("http://www.xxx.com/下载路径/xxx.apk", //这里是下载的路径 true,//true:断点续传 false:不断点续传(全新下载) "/mnt/sdcard/testapk.apk", //这是保存到本地的路径 new AjaxCallBack() { @Override public void onLoading(long count, long current) { textView.setText("下载进度:"+current+"/"+count); } @Override public void onSuccess(File t) { textView.setText(t==null?"null":t.getAbsoluteFile().toString()); } }); //调用stop()方法停止下载 handler.stop();
FinalBitmap的使用:
private static FinalBitmap mFinalBitmap; // //////////////////////// config method // start//////////////////////////////////// private FinalBitmap(Context context) { mContext = context; mConfig = new FinalBitmapConfig(context); configDiskCachePath(Utils.getDiskCacheDir(context, "afinalCache") .getAbsolutePath());// 配置缓存路径 configDisplayer(new SimpleDisplayer());// 配置显示器 configDownlader(new SimpleDownloader());// 配置下载器 }
以上为FinalBitmap的构造器源码,代码详细信息已经注释,我们可以看出,FinalBitmap使用的是线程安全的单例模式,因此,当我们想获取一个FinalBitmap对象的时候,我们可以这样做:
FinalBitmap finalBitmap = FinalBitmap.create(context);
之后可以自己去配置相关的参数:
finalBitmap.configBitmapLoadThreadSize(3); //图片大小 finalBitmap.configBitmapMaxHeight(800); finalBitmap.configBitmapMaxWidth(480); //磁盘缓存路径 finalBitmap.configDiskCachePath(""); finalBitmap.configDiskCacheSize(10*1024); //配置显示 finalBitmap.configDisplayer(new Displayer() { @Override public void loadFailDisplay(View imageView, Bitmap bitmap) { // TODO Auto-generated method stub //设置失败 显示图片 404 等等 } @Override public void loadCompletedisplay(View imageView, Bitmap bitmap, BitmapDisplayConfig config) { // TODO Auto-generated method stub // 加载成功 开启动画等等imageView.startAnimation(); } }); //可自己定义下载器 finalBitmap.configDownlader(new Downloader() { @Override public byte[] download(String urlString) { // TODO Auto-generated method stub //自己写下载代码。这个已经是异步操作了 return null; } }); //加载时显示的图片。即默认图片 finalBitmap.configLoadingImage(null); //配置内存缓存大小 finalBitmap.configMemoryCacheSize(4); //待我后面再讲 finalBitmap.configRecycleImmediately(true); finalBitmap.setExitTasksEarly(true);
finalBitmap提供了display方法供大家调用,源码中一共有六个不同参数的dispaly方法。(大家可以去看源码)。
下面展示一种加载网络图片的display的使用方法:
private GridView gridView; private FinalBitmap fb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.images); gridView = (GridView) findViewById(R.id.gridView); gridView.setAdapter(mAdapter); fb = FinalBitmap.create(this);//初始化FinalBitmap模块 fb.configLoadingImage(R.drawable.downloading); //这里可以进行其他十几项的配置,也可以不用配置,配置之后必须调用init()函数,才生效 //fb.configBitmapLoadThreadSize(int size) //fb.configBitmapMaxHeight(bitmapHeight) } ///////////////////////////adapter getView//////////////////////////////////////////// public View getView(int position, View convertView, ViewGroup parent) { ImageView iv; if(convertView == null){ convertView = View.inflate(BitmapCacheActivity.this,R.layout.image_item, null); iv = (ImageView) convertView.findViewById(R.id.imageView); iv.setScaleType(ScaleType.CENTER_CROP); convertView.setTag(iv); }else{ iv = (ImageView) convertView.getTag(); } //bitmap加载就这一行代码,display还有其他重载,详情查看源码 fb.display(iv,Images.imageUrls[position]);
相关推荐
**AFinal简介** AFinal是由尹吉欢(Yin Jihuan)开发的一个轻量级的Android ORM(对象关系映射)框架,它简化了数据库操作,使得...在AFinalDemo项目中,你可以找到更多关于如何在实际应用中使用AFinal的例子和细节。
在你的应用程序的Application类中,创建一个AFinal实例,通常我们会配置一个SQLite数据库: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ...
1. 数据库操作:Afinal基于SQLite,提供了简单易用的ORM(Object-Relational Mapping)框架。通过注解,开发者可以直接在Java对象上进行数据库操作,如增删改查,避免了大量SQL语句的编写。 2. HTTP请求:Afinal内置...
Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用; 使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。 ...
`afinal` 是一个专为 Android 应用程序设计的轻量级 ORM(对象关系映射)和 IOC(依赖注入)框架。它的核心目标是简化 Android 开发过程,特别是数据库操作和组件之间的依赖管理。`afinal` 的突出优点在于其简洁易用...
Afinal 提供了简单易用的 API,使得数据库操作如同操作 Java 集合一样便捷。在本文中,我们将深入探讨 Afinal 的核心特性、工作原理以及如何在实际项目中应用。 ### 1. Afinal 的主要特性 - **简洁的API**:Afinal...
finalDB 是 Afinal 中的数据库管理模块,它基于 SQLite,提供了简单的 API 来进行数据操作。通过 finalDB,开发者可以快速地进行数据库表的创建、查询、更新和删除等操作,无需编写繁琐的 SQL 语句。以下是一些关键...
Afinal由林永坚开发,其设计目标是为Android开发者提供一种简单、快速的数据库操作方式。Afinal的核心功能包括:SQL语句的自动拼接、事务管理、数据库连接池以及对SQLite数据库的全面支持。通过Afinal,开发者可以...
2. **初始化Afinal**:在应用程序的Application类中,需要进行Afinal的初始化,一般会指定数据库的路径和名称,例如: ```java Afinal.init(this, "my_database.db", 1); ``` 3. **数据库操作示例**: 创建一...
二、Afinal的网络请求 除了数据库操作,Afinal还提供了网络请求的功能。它封装了HttpURLConnection或OkHttp,使网络请求更加便捷: 1. **异步和同步请求**:Afinal支持异步和同步两种方式发送HTTP请求,异步请求...
aFinal的核心理念是"简单、高效、易用",它将Java的编程风格引入到Android开发中,让开发者可以更加专注于业务逻辑,而不是底层的实现细节。 1. **数据库操作** aFinal提供了强大的SQLite数据库支持,通过注解的...
1. 数据库操作:Afinal基于SQLite数据库,提供了简单易用的API,使得开发者可以方便地进行CRUD(创建、读取、更新、删除)操作。例如,通过继承`BaseModel`类并定义实体类,Afinal会自动创建对应的数据库表。同时,...
本压缩包"Android代码-afinal开源框架实例源码.zip"包含了Afinal框架的具体应用示例,帮助开发者理解和学习如何在实际项目中运用Afinal。 Afinal的核心特性包括: 1. **数据库操作**:Afinal基于ActiveAndroid,...
1. **FinalDB**:这是Afinal中的数据库管理模块,它基于ActiveAndroid进行优化,提供了简单易用的ORM(对象关系映射)功能。FinalDB使得开发者可以通过简单的注解方式将Java对象与SQLite数据库表进行绑定,极大地...
本资源提供了使用afinal框架实现图片的简单异步缓存加载的源码,帮助开发者深入理解afinal框架在实际项目中的应用。 Afinal是一个轻量级的Android开发框架,由知数科技的陈思创建,它整合了I/O操作、数据库ORM...
总之,afinal框架通过提供简单易用的API,帮助开发者高效地实现图片的异步加载和缓存,提高了应用的响应速度和用户体验。了解并掌握这一机制,对于优化Android应用的性能至关重要。通过研究afinal框架的源代码,我们...
1. **简单易用**:Afinal提供了简单的API接口,如SQL语句的执行、增删改查等操作,只需要几行代码就能完成。 2. **自动管理数据库升级**:Afinal支持数据库版本管理,当数据库结构发生变化时,可以通过自定义的...
在安卓开发中,图片加载是...总的来说,`afinal`框架通过`BitmapCacheHelper`实现了高效的图片异步加载和缓存,优化了安卓应用的性能,提高了用户体验。理解并熟练运用这一机制,对于安卓开发者来说是非常重要的技能。
二、AFinal的使用步骤 1. **引入依赖**:在项目的build.gradle文件中添加AFinal的依赖库,通常通过Maven或JCenter仓库获取。 2. **初始化配置**:在Application的onCreate()方法中进行AFinal的初始化,设置数据库...
Afinal的SQLite操作不仅支持简单的SQL语句,还支持事务处理,使得数据库操作更加安全可靠。 2. **网络请求** Afinal集成了网络请求功能,支持HTTP/HTTPS协议,可以发送GET、POST等多种HTTP请求。在Android应用中,...