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


目前Afinal主要有四大模块:

FinalDB模块:android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。
FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
FinalHttp模块:通过httpclient进行封装http数据请求,支持ajax方式加载。

FinalBitmap模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,在imageview显示图片的时候播放动画等(默认是渐变动画显示)。


Afinal更多信息可以参考:https://github.com/yangfuhai/afinal


这里我要使用的是它的FinalDB模块,下面通过一个简单Demo来展示一下。

Book实体定义如下:

[java] view plain copy
  1. packagecom.example.afinaltest.entity;
  2. importnet.tsz.afinal.annotation.sqlite.Table;
  3. @Table(name="book")
  4. publicclassBook{
  5. privateintid;
  6. privateStringname;
  7. privateStringisbn;
  8. privatefloatprice;
  9. publicintgetId(){
  10. returnid;
  11. }
  12. publicvoidsetId(intid){
  13. this.id=id;
  14. }
  15. publicStringgetName(){
  16. returnname;
  17. }
  18. publicvoidsetName(Stringname){
  19. this.name=name;
  20. }
  21. publicStringgetIsbn(){
  22. returnisbn;
  23. }
  24. publicvoidsetIsbn(Stringisbn){
  25. this.isbn=isbn;
  26. }
  27. publicfloatgetPrice(){
  28. returnprice;
  29. }
  30. publicvoidsetPrice(floatprice){
  31. this.price=price;
  32. }
  33. @Override
  34. publicStringtoString(){
  35. return"Book[id="+id+",name="+name+",isbn="+isbn
  36. +",price="+price+"]";
  37. }
  38. }

这个实体类要注意一点就是getter和setter是不能省略的,因为afinal的finalDb最终会调用setter去给实体类的属性赋值。注解 @Table(name="book")表示我们希望将Book实体映射到book表中,Book类的属性会映射成对应表中的字段。


以下类中展示FinalDb的CRUD功能

[java] view plain copy
  1. packagecom.example.afinaltest;
  2. importjava.util.List;
  3. importcom.example.afinaltest.entity.Book;
  4. importnet.tsz.afinal.FinalDb;
  5. importandroid.app.Activity;
  6. importandroid.os.Bundle;
  7. importandroid.view.View;
  8. importandroid.view.View.OnClickListener;
  9. importandroid.widget.Button;
  10. publicclassMainActivityextendsActivityimplementsOnClickListener{
  11. @Override
  12. protectedvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. findView();
  16. }
  17. privatevoidfindView(){
  18. Buttonbt_database=(Button)findViewById(R.id.bt_database);
  19. Buttonbt_insert=(Button)findViewById(R.id.bt_insert);
  20. Buttonbt_query=(Button)findViewById(R.id.bt_query);
  21. Buttonbt_update=(Button)findViewById(R.id.bt_update);
  22. Buttonbt_delete=(Button)findViewById(R.id.bt_delete);
  23. bt_database.setOnClickListener(this);
  24. bt_insert.setOnClickListener(this);
  25. bt_query.setOnClickListener(this);
  26. bt_update.setOnClickListener(this);
  27. bt_delete.setOnClickListener(this);
  28. }
  29. @Override
  30. publicvoidonClick(Viewv){
  31. FinalDbfinalDb=null;
  32. switch(v.getId()){
  33. caseR.id.bt_database:
  34. finalDb=FinalDb.create(this,"cart");//创建数据库
  35. break;
  36. caseR.id.bt_insert:
  37. finalDb=FinalDb.create(this,"cart");
  38. Bookbook=newBook();//这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性
  39. book.setName("设计模式");
  40. book.setIsbn("ISBN1000");
  41. book.setPrice(48.9f);
  42. finalDb.save(book);
  43. book=newBook();
  44. book.setName("大话设计模式");
  45. book.setIsbn("ISBN2000");
  46. book.setPrice(88.9f);
  47. finalDb.save(book);
  48. book=newBook();
  49. book.setName("研磨设计模式");
  50. book.setIsbn("ISBN3000");
  51. book.setPrice(58.9f);
  52. finalDb.save(book);
  53. book=newBook();
  54. book.setName("深入Java虚拟机");
  55. book.setIsbn("ISBN4000");
  56. book.setPrice(78.5f);
  57. finalDb.save(book);
  58. break;
  59. caseR.id.bt_query:
  60. finalDb=FinalDb.create(this,"cart");
  61. List<Book>list=finalDb.findAllByWhere(Book.class,"namelike'%设计模式'");
  62. for(inti=0;list!=null&&i<list.size();i++){
  63. System.out.println(list.get(i));
  64. }
  65. break;
  66. caseR.id.bt_update:
  67. finalDb=FinalDb.create(this,"cart");
  68. Bookentity=newBook();
  69. entity.setName("设计模式");
  70. entity.setIsbn("ISBN1000");
  71. entity.setPrice(108.9f);
  72. //finalDb.update(entity);
  73. finalDb.update(entity,"namelike'%设计模式'");
  74. break;
  75. caseR.id.bt_delete:
  76. finalDb=FinalDb.create(this,"cart");
  77. //finalDb.delete(entity);
  78. finalDb.deleteById(Book.class,1);
  79. //finalDb.deleteByWhere(Book.class,"namelike'%设计模式'");
  80. break;
  81. default:
  82. break;
  83. }
  84. }
  85. }


FinalDB优点
android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。


FinalDb的缺点

目前暂时不支持复合主键,并且对SQL语句的支持也非常有限,一些比较复杂的业务逻辑实现非常麻烦!



推荐github上一个开源项目 xUtils,它基于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响

xUtils:https://github.com/wyouflf/xUtils

更多相关文章

  1. Android(安卓)Volley完全解析(二),使用Volley加载网络图片
  2. android 图片加载和缓存开源项目 Picasso
  3. Message Android的享元模式
  4. Android高频面试专题 - 基础篇(一)Activity
  5. Activity的四种加载方式
  6. android universalimageloader 几点改进
  7. Android中MVC框架的运用
  8. android快速开发框架afinal(数据库篇)
  9. Android和H5交互-基础篇

随机推荐

  1. Android运行时异常“Binary XML file lin
  2. Android(安卓)中的危险权限
  3. Android(安卓)使用draw9patch技术实现不
  4. android中Retrofit2.0的封装:设计到请求前
  5. 如何在首次启动时跳过Google安装向导
  6. android 条码识别软件开发全解析:1
  7. 使用 buck 打包 Android( 使用OkBuck给And
  8. 求解答:Android的一个小的应用程序在模拟
  9. Android(安卓)图片平铺效果bitmap
  10. 暑期实训总结_李飞