ObjectBox的使用

2,796 阅读2分钟

添加依赖

在整个项目的build.gradle里添加

buildscript {
    ext.objectboxVersion = '2.6.0'
    repositories {
        jcenter()
    }
    dependencies {
        // Android Gradle Plugin 3.0.0 or later supported
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

在app的build.gradle里添加

kotlin

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' // Required for annotation processing.
apply plugin: 'io.objectbox' // Apply last.

好了,依赖加完了

添加初始化代码

添加初始化代码:

可以把这个类放到自定义的application中,也可以单独一个类

object ObjectBox {
    lateinit var boxStore: BoxStore
        private set

    fun init(context: Context) {
        boxStore = MyObjectBox.builder()
                .androidContext(context.applicationContext)
                .build()
    }
}

这里的MyObjectBox是编译自动生成的。如果编译之后没有生成,可以先按照下面的步骤添加Entity类,然后再编译,这样应该就可以生成了。

然后在自定义的application中调用初始化

class ExampleApp : Application() {
    override fun onCreate() {
        super.onCreate()
        ObjectBox.init(this)
    }
}

接下来就可以使用了:

val userBox: Box<User> = ObjectBox.boxStore.boxFor()

上面部分的参考文档:docs.objectbox.io/getting-sta…

开始使用

添加entity

// User.kt
@Entity
data class User(
        @Id var id: Long = 0,
        var name: String? = null
)

几个注意的点:

  • 类上面可以打@Entity,如果是基类则打@BaseEntity
  • 一定要有一个@Id,类型为Long的属性,用于自增属性。
  • kotlin中的data class一定要有默认值,不然可能会找不到默认的构造方法。(新加的字段最好设置为可空,因为新加的字段查询的时候肯定是没有值的。)
  • 如果某个字段不想序列化到数据库中可以打上:@Transient标签,从kotlin里或者objectBox中导入的都可以。

增加:

App.ObjectBox.boxStore.boxFor<Project>().put(project)

查找:

App.ObjectBox.boxStore.boxFor<Mark>()
        .query()
        .equal(Mark_.projectId, projectId)
        .build()
        .find()

查找并且删除:

val box = App.ObjectBox.boxStore.boxFor<Mark>()
box.query().equal(Mark_.projectId, projectId).build().remove()

query的参考文档:docs.objectbox.io/queries

使用内置liveData

构造liveData

var urlLiveData: ObjectBoxLiveData<UrlEntity> = ObjectBoxLiveData(box.query().orderDesc(UrlEntity_.createTime).build())
  • ObjectBoxLiveData的构造函数需要一个query作为参数。
  • 他的泛型虽然是Entity,但是observer接受到的是一个List<Entity>

observer端:

mViewModel.urlLiveData.observe(this, Observer {
      mAdapter.refreshData(it)
})

这里拿到的it是一个List

参考文档:docs.objectbox.io/android/liv…