添加依赖
在整个项目的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