ActivieAndroid是Android下之ORM(对象关系型)
映射)框架,使用反射和注释(Annotation)来简化数据库存储,其面目也是DatabaseManager的一个担保,我们不体贴内部Cursor关机,同步锁定问题,不欲控制其是不是会见内存泄漏,只是下它。

  • 留意:谨慎采用框架,有一个再度好之圈子框架,不建议看

品种介绍

  • 项目名称: ActiveAndroid
  • 花色地址:https://github.com/pardom/ActiveAndroid
  • 导入方法

repositories {
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}

compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
  • 项目WIKI:https://github.com/pardom/ActiveAndroid/wiki

哪下

初始化ActiveAndroid

创造GlobalContext单例以决定该生命周期

public class GlobalContext extends Application {

  //singleton
  private static GlobalContext globalContext = null;
  private boolean isDebug = true;

  @Override public void onCreate() {
    super.onCreate();
    globalContext = this;
    ActiveAndroid.initialize(this);
  }

  @Override public void onTerminate() {
    super.onTerminate();
    Log.d("GlobalContext","onTerminate");
    ActiveAndroid.dispose();
  }

  public static GlobalContext getInstance() {
    return globalContext;
  }
}

小心不要忘记AndroidManifest<application/>加入android:name注册。

修改Bean对象

此目标用于解析json对象与储存数据库。

  • @Table(name="basetable")表示数据库的称呼
  • @Column(name = "idMember")意味着存储在数据库被之密钥
  • @SerializedName(value="id")指令以Gson序列化和反序列化时之键
  • extends Model它们是ActiveAndroid所必需的。请留意,它起一个ID,因此一旦你的json对象中起id,则需要以那个改变为其它名目。

@Table(name="basetable")
public class Feed extends Model{
  //do not use `id` because it has been defined in Model
  @Column(name = "idMember")
  @SerializedName(value="id")
  private int idMember;

  @Column(name = "category")
  private int category;

  @Column(name = "title")
  private String title;

  @Column(name = "simpleContent")
  @SerializedName("simple_content")
  private String simpleContent;

  @Column(name = "image1")
  private String image1;

  @Column(name = "image2")
  private String image2;

  @Column(name = "image3")
  private String image3;

  @Column(name = "timeRelease")
  @SerializedName("time_release")
  private String timeRelease;

  @Column(name = "isCollect")
  private boolean isCollect;

  //getter and setter
  .....
}

IO操作

当UI线程下用IO操作

存储

private void cacheToDb(List<Feed> feeds) {
    //如果你同时只操作一个数据库的话,就用被注释掉的方法,反之用下面的
    //try {
    //  for (Feed feed : feeds) {
    //    feed.save();
    //  }
    //  ActiveAndroid.setTransactionSuccessful();
    //} finally {
    //  ActiveAndroid.endTransaction();
    //}
    for (Feed feed : feeds) {
      feed.save();
    }
  }

List<T>

 void loadDbFeeds() {
    List<Feed> feeds;

    feeds = new Select().from(Feed.class)
        .where("category = ?", feed_category)
        .orderBy("idMember desc")
        .limit(feed_limit)
        .execute();
    Log.d(TAG, "loadDbFeeds,size = " + feeds.size());
    if (feeds.isEmpty()) {
      //TODO
      loadNewFeeds();
    } else {
      newsBeans.addAll(feeds);
      adapter.notifyDataSetChanged();
    }
  }

读取数据

Feed feed = new Select()
                .from(Feed.class)
                .where("idMember = ?", idMember)
                .orderBy("idMember desc")
                .executeSingle();

源代码

比如作证是新落成的支出品种之技能摘要。

该项目之兼具代码都在GitHub上每当库里,欢迎Star and Fork

成品在腾讯App Store呢堪下载

相关文章

网站地图xml地图