android LeanCloud 数据存储


目录


对象

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(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值