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显示图片的时候播放动画等(默认是渐变动画显示)。

添加权限:

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 第一个是访问网络
  • 第二个是访问sdcard
  • 访问网络是请求网络图片的时候需要或者是http数据请求时候需要,访问sdcard是图片缓存的需要。

AfinalDB的使用:

实体类:

@Table (name="book")  //Book实体映射到book表中,Book类的属性会映射成对应表中的字段public class Book {private int id;private String name;private String isbn;private float price;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}@Overridepublic String toString() {return "Book [id=" + id + ", name=" + name + ", isbn=" + isbn+ ", price=" + price + "]";}}

主类:

import java.util.List;import net.tsz.afinal.FinalDb;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findView();}private void findView() {Button bt_database = (Button) findViewById(R.id.bt_database);Button bt_insert = (Button) findViewById(R.id.bt_insert);Button bt_query = (Button) findViewById(R.id.bt_query);Button bt_update = (Button) findViewById(R.id.bt_update);Button bt_delete = (Button) findViewById(R.id.bt_delete);bt_database.setOnClickListener(this);bt_insert.setOnClickListener(this);bt_query.setOnClickListener(this);bt_update.setOnClickListener(this);bt_delete.setOnClickListener(this);}@Overridepublic void onClick(View v) {FinalDb finalDb = null;switch (v.getId()) {case R.id.bt_database:finalDb = FinalDb.create(this, "cart"); // 创建数据库break;case R.id.bt_insert:finalDb = FinalDb.create(this, "cart");Book book = new Book();// 这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性book.setName("设计模式");book.setIsbn("ISBN1000");book.setPrice(48.9f);finalDb.save(book);book = new Book();book.setName("大话设计模式");book.setIsbn("ISBN2000");book.setPrice(88.9f);finalDb.save(book);book = new Book();book.setName("研磨设计模式");book.setIsbn("ISBN3000");book.setPrice(58.9f);finalDb.save(book);book = new Book();book.setName("深入Java虚拟机");book.setIsbn("ISBN4000");book.setPrice(78.5f);finalDb.save(book);break;case R.id.bt_query:finalDb = FinalDb.create(this, "cart");List<Book> list = finalDb.findAllByWhere(Book.class,"name like '%设计模式'");for (int i = 0; list != null && i < list.size(); i++) {System.out.println(list.get(i));}break;case R.id.bt_update:finalDb = FinalDb.create(this, "cart");Book entity = new Book();entity.setName("设计模式");entity.setIsbn("ISBN1000");entity.setPrice(108.9f);finalDb.update(entity, "name like '%设计模式'");break;case R.id.bt_delete:finalDb = FinalDb.create(this, "cart");// finalDb.delete(entity);finalDb.deleteById(Book.class, 1);// finalDb.deleteByWhere(Book.class, "name like '%设计模式'");break;default:break;}}}

FinalDB OneToMany懒加载使用方法:

模型定义:

public class Parent{    private int id;    @OneToMany(manyColumn = "parentId")    private OneToManyLazyLoader<Parent ,Child> children;    /*....*/}public class Child{    private int id;    private String text;    @ManyToOne(column = "parentId")    private  Parent  parent;    /*....*/}

使用:

List<Parent> all = db.findAll(Parent.class);        for( Parent  item : all){            if(item.getChildren ().getList().size()>0)                Toast.makeText(this,item.getText() + item.getChildren().getList().get(0).getText(),Toast.LENGTH_LONG).show();        }

总结:

FinalDB优点

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

FinalDb的缺点

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

FinalActivity使用方法:

  • 完全注解方式就可以进行UI绑定和事件绑定
  • 无需findViewById和setClickListener等
public class AfinalDemoActivity extends FinalActivity {    //无需调用findViewById和setOnclickListener等。    // 相当于 Button button= (Button) findViewById(R.id.button);    //  和    button.setOnClickListener(this); 这两句    @ViewInject(id=R.id.button,click="btnClick") Button button;    @ViewInject(id=R.id.textView) TextView textView;    public void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.main);    }    public void btnClick(View v){       textView.setText("text set form button");    }}
  • 在其他侵入式框架下使用(如ActionBarShelock)

protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);        setContentView(view);        FinalActivity.initInjectedView(this);     }

  • 在Fragment中使用

public View onCreateView(LayoutInflater inflater, ViewGroup container,          Bundle savedInstanceState) {       View viewRoot = inflater.inflate(R.layout.map_frame, container, false);       FinalActivity.initInjectedView(this,viewRoot);    }

参考:https://github.com/yangfuhai/afinal

http://my.oschina.net/bv10000/blog/211652

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android 使用html5作布局文件: webview跟javascript交互
  6. Android系统配置数据库注释(settings.db)
  7. Android(安卓)Resource介绍和使用
  8. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  9. 使用NetBeans搭建Android开发环境

随机推荐

  1. android (13) Fragment使用下
  2. android 按钮 的状态
  3. Android HAL是如何被调用的
  4. 使用迅雷下载android 镜像
  5. Android CountDownLatch的使用
  6. Android Bluetooth 总结
  7. android中的spannable的使用
  8. android 仿微信群聊头像 合成图片
  9. Android自定义dialog对话框悬浮在界面上
  10. Android视频播放项目总结之 使用VideoVie