对象
1. 保存到云
禁止用户创建Class:控制台 > 数据存储 > 服务设置
// 创建一个云对象
val todo = LCObject("Todo")
// 给对象中的属性赋值
todo.put("title", "工程师周会")
todo.put("content", "周二两点,全体成员")
todo
// 在其他线程将对象保存到云端
.saveInBackground()
// 回调
.subscribe(object : Observer<LCObject> {
override fun onSubscribe(disposable: Disposable) {
}
override fun onNext(todo: LCObject) {
}
override fun onError(throwable: Throwable) {
}
override fun onComplete() {
}
})
2. 获取云对象 (查询)
// 实例云对象查询类
val query = LCQuery<LCObject>("Todo")
// 通过Id获取云对象
query
.getInBackground("582570f38ac247004f39c24b")
.subscribe(object : Observer<LCObject> {
override fun onSubscribe(disposable: Disposable) {
}
override fun onNext(todo: LCObject) {
}
override fun onError(throwable: Throwable) {
}
override fun onComplete() {
}
})
3. 云同步本地对象
// 创建一个具有Id值的云对象
val todo = LCObject.createWithoutData("Todo", "582570f38ac247004f39c24b")
// 指定被同步的属性,不填则全部刷新
val keys = "priority, location"
// 同步对象的属性
todo
.fetchInBackground(keys)
.subscribe(object : Observer<LCObject> {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: LCObject) {
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
}
})
// fetchIfNeededInBackground 替换 fetchInBackground 云端没有,则LCObject = 本地LCObject
4. 更新云对象
// 创建一个具有Id值的云对象
val todo = LCObject.createWithoutData("Todo", "582570f38ac247004f39c24b")
// 放入需要修改的属性值
todo.put("content", "这周周会改到周三下午三点。")
// 在属性值的基础上增加,原子操作
account.increment("balance", -100)
// 特定属性值是否应该更新
val option = LCSaveOption()
// 要求balance -100 之前必须 >=100
option.query(
LCQuery<LCObject>("Account").whereGreaterThanOrEqualTo("balance", 100)
)
// 更新对象后,获取最新云对象
option.setFetchWhenSave(true)
// 更新对象的属性
todo.saveInBackground(option).subscribe(object : Observer<LCObject> {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: LCObject) {
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
}
})
5.更新云对象中的数组,原子操作
// 创建一个云对象
val todo = LCObject("Todo")
// 添加到数组末尾
todo.add("alarms", "")
// 添加的对象必须在数组中唯一,插入随机位置
todo.addUnique("alarms", "")
// 删除传入的数组中的所有对象
todo.removeAll("alarms", listOf())
// 更新对象的属性
account.saveInBackground().subscribe(object : Observer<LCObject> {
override fun onSubscribe(disposable: Disposable) {
}
override fun onNext(account: LCObject) {
}
override fun onError(throwable: Throwable) {
}
override fun onComplete() {
}
})
6. 删除云对象
// 创建一个具有Id值的云对象
val todo = LCObject.createWithoutData("Todo", "582570f38ac247004f39c24b")
// 删除对象
todo.deleteInBackground().subscribe(object : Observer<LCNull?> {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: LCNull) {
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
}
})
7. 批量 [存(改),更新,删] 云对象
// 创建一个查询对象
val query = LCQuery<LCObject>("Todo")
// 获取此类的所有对象
query.findInBackground().subscribe(object : Observer<List<LCObject>> {
override fun onSubscribe(disposable: Disposable) {
}
override fun onNext(todos: List<LCObject>) {
for (todo in todos) {
todo.put("isComplete", true)
}
// 一次操作多个对象
// saveAll 和 fetchAll 实际与调用多次save 和 fetch 计费上无区别
// deleteAll 与 调用多次 delete 有区别,deleteAll仅计费一次操作
// 计费:接口调用次数计费
LCObject.saveAll(todos)
}
override fun onError(throwable: Throwable) {
}
override fun onComplete() {
}
})
8. 后台执行,无网络等待执行
val todo = LCObject("Todo")
// 当没有网络时,会等待网络连接时再执行,即便应用被关闭了,下次打开时,会继续尝试执行,按调用顺序执行
todo.saveEventually()
todo.deleteEventually()
9. 一篇文章,多个评论
一对一:一个表的row储存另一个表的rowid(关系型数据库)
一对一:一个类的对象属性储存另一个类的对象指针(LeanCloud / MongoDB)
一对多:一个表的rowid被多个表的row储存(关系型数据库)
一对多:一个类的对象储存另一个类的对象指针数组(LeanCloud / MongoDB)
多对多:一个表的row储存多个表的rowid(关系型数据库)
多对多:一个类的对象储存多个类的对象指针(LeanCloud / MongoDB)
// 一篇文章
LCObject post = LCObject.createWithoutData("Post", "57328ca079bc44005c2472d0")
// 一条评论
val comment = LCObject("Comment")
// 被指向的对象,被储存为 Pointer(指针)
comment.put("parent", post)
comment.put("content", "当然是肯德基啦!")
// 保存评论
comment.saveEventually()
10. 转Json和恢复
val todo = LCObject("Todo")
// 转json
val serializedString = todo.toString()
// json转对象
val deserializedObject = LCObject.parseLCObject(serializedString)
// 保存到云端
deserializedObject.saveEventually()
查询
一次获取多个符合特定条件的 LCObject
// 实例云对象查询类
val query = LCQuery<LCObject>("Student")
// 查询返回云对象集合
query.findInBackground().subscribe(object : Observer<List<LCObject?>?> {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: List<LCObject?>) {
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
}
})
=
// 条件:属性等于
query.whereEqualTo("lastName", "Smith")
!=
query.whereNotEqualTo(