【发布时间】:2019-03-22 13:57:27
【问题描述】:
这个问题经常被问到并以多种方式解决,但如果我回到同一个问题,那是因为我有点困惑。这是我第一次接触 Realm ORM。
数据库存储实现的这个存储库类状态。它以 Realm 和 ApiService 为实例
class LoginRepositoryImpl(var realm: Realm, var apiService: ApiService){
override fun doLogin(email: String, password: String) {
apiService.loginCheck(email, password)
.flatMap { t: EntityToken ->
// check if user already exist and delete it
val checkIfUserExist = getUserIfExist("email", email)
if (checkIfUserExist != null) {
realm.executeTransactionAsync {
checkIfUserExist.deleteFromRealm()
}
}
// insert user into DB
realm.executeTransactionAsync { bgRealm ->
val user = bgRealm.createObject(UserModel::class.java, UserModel.cachedNextId)
user.email = email
user.logged = true
}
// i want to make another request to server
return@flatMap apiService.pingServer(t.refresh_token)
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ uR ->
// make update of user table
realm.executeTransactionAsync {
getUserIfExist("email", email)?.fullname = uR.fullname
}
}
}
//function to check if user instance already exist
private fun getUserIfExist(field: String, email: String): UserModel? {
return realm.where(UserModel::class.java)
.equalTo(field, email)
.findFirstAsync()
}
}
Ps.帮我解决从错误线程访问领域
【问题讨论】:
标签: android realm retrofit2 rx-java2