一、update-model记录


model类有很多属性,想要更新某个字段,那是否要增加个函数呢?如要再要更新另一个字段,还得再额外增加function

。这样增加冗余代码。看一看realm是怎么处理的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class RealmManager {
private var realmConfig: RealmConfiguration = RealmConfiguration.Builder()
.name("simple_realm")
.build()


var realm: Realm = Realm.getInstance(realmConfig)
get() = Realm.getInstance(realmConfig)

private constructor()

companion object {
@Volatile private var INSTANCE: RealmManager? = null
fun getInstance() : RealmManager {
return INSTANCE?: synchronized(this) {
INSTANCE?: RealmManager().also { INSTANCE = it }
}
}
}

fun getVersion() : Version{

var version = realm.where(Version::class.java).findFirst()
if (version == null) {
version = Version()
realm.executeTransaction {
it.insert(version)
//it.insertOrUpdate()
}
}
return version!!
}

fun getRawVersion() : Version{
var version = getVersion()
return realm.copyFromRealm(version)//关键语句
}

fun updateVersion(version: Version) {
realm.executeTransaction {
it.insertOrUpdate(version)
}
}
}

关键点就是: copyFromRealm,将从realm数据库里查询出来的Version对象托管,再随意更改该对象的值,然后把该对象作为参数传进updateVersion方法即可:

1
2
3
4
5
6
7
8
9
10
11
12
private fun saveVersion(apkUpgrade: Boolean, rnUpgrade: Boolean, apkVersion: VersionResult, rnVersion: VersionResult) {
var version = RealmManager.getInstance().getRawVersion()
if (apkUpgrade) {
version.apkNewVersionCode = apkVersion.versionCode.toLong()
version.apkNewVersionName = apkVersion.versionName
}
if (rnUpgrade) {
version.rnNewVersionCode = rnVersion.versionCode.toLong()
version.rnNewVersionName = rnVersion.versionName
}
RealmManager.getInstance().updateVersion(version)
}

getRawVersion方法返回的对象是数据库托管的。
这样就实现了对更改一个model只用一个update方法