ActivieAndroid是Android下的一款ORM(Object-relational
mapping)框架,选用了反光与讲明(Annotation)的情势简化了数据库存储,它的本色也是一个DatabaseManager的一个包裹,我们不要关心内部的Cursor的关闭,同步锁的题目,也不用控制它是不是会内存泄露,只管用就足以了。

  • 留意:慎用框架,近期有了更好的realm框架,不提议接着看了

类型简介

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

compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'

咋样利用

初始化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")意味着在数据库存储的Key
  • @SerializedName(value="id")表示用Gson序列化与反体系化时的Key
  • 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操作

IO操作都是在UI线程下使用的

存储

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();

Source code

此笔记为刚刚完成的支付项目上线后的技能总计

该品种的所有的代码都在GitHub仓库中,欢迎Star与Fork

成品在腾讯运用商店也足以下载

相关文章

网站地图xml地图