Skip to content

Commit 6001bf4

Browse files
committed
resolve Realm threading and closed instance errors
1 parent 54e81b5 commit 6001bf4

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

app/src/main/java/org/ole/planet/myplanet/service/UserProfileDbHandler.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class UserProfileDbHandler @Inject constructor(
7171
val parentCode = model?.parentCode
7272
val planetCode = model?.planetCode
7373

74-
realmService.withRealmAsync { realm ->
74+
realmService.executeTransactionAsync { realm ->
7575
val offlineActivities = realm.createObject(RealmOfflineActivity::class.java, UUID.randomUUID().toString())
7676
offlineActivities.userId = userId
7777
offlineActivities.userName = userName
@@ -97,7 +97,7 @@ class UserProfileDbHandler @Inject constructor(
9797
fun logoutAsync() {
9898
GlobalScope.launch(Dispatchers.IO) {
9999
try {
100-
realmService.withRealmAsync { realm ->
100+
realmService.executeTransactionAsync { realm ->
101101
RealmOfflineActivity.getRecentLogin(realm)
102102
?.logoutTime = Date().time
103103
}
@@ -146,6 +146,9 @@ class UserProfileDbHandler @Inject constructor(
146146
}
147147

148148
fun setResourceOpenCount(item: RealmMyLibrary, type: String?) {
149+
val itemTitle = item.title
150+
val itemResourceId = item.resourceId
151+
149152
GlobalScope.launch(Dispatchers.IO) {
150153
try {
151154
val model = getUserModelCopy()
@@ -156,10 +159,8 @@ class UserProfileDbHandler @Inject constructor(
156159
val userName = model?.name
157160
val parentCode = model?.parentCode
158161
val planetCode = model?.planetCode
159-
val itemTitle = item.title
160-
val itemResourceId = item.resourceId
161162

162-
realmService.withRealmAsync { realm ->
163+
realmService.executeTransactionAsync { realm ->
163164
val offlineActivities = realm.createObject(RealmResourceActivity::class.java, "${UUID.randomUUID()}")
164165
offlineActivities.user = userName
165166
offlineActivities.parentCode = parentCode

app/src/main/java/org/ole/planet/myplanet/ui/sync/LoginActivity.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
173173
binding.inputPassword.error = getString(R.string.err_msg_password)
174174
} else {
175175
val enterUserName = binding.inputName.text.toString().trimEnd()
176-
val user = mRealm.where(RealmUserModel::class.java).equalTo("name", enterUserName).findFirst()
176+
val user = databaseService.withRealm { realm ->
177+
realm.where(RealmUserModel::class.java).equalTo("name", enterUserName).findFirst()?.let { realm.copyFromRealm(it) }
178+
}
177179
if (user == null || !user.isArchived) {
178180
submitForm(enterUserName, binding.inputPassword.text.toString())
179181
} else {
@@ -287,8 +289,10 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
287289
}
288290

289291
fun updateTeamDropdown() {
290-
val teams: List<RealmMyTeam>? = mRealm.where(RealmMyTeam::class.java)
291-
?.isEmpty("teamId")?.equalTo("status", "active")?.findAll()
292+
val teams: List<RealmMyTeam>? = databaseService.withRealm { realm ->
293+
realm.where(RealmMyTeam::class.java)
294+
.isEmpty("teamId").equalTo("status", "active").findAll()?.let { realm.copyFromRealm(it) }
295+
}
292296

293297
if (!teams.isNullOrEmpty()) {
294298
binding.team.visibility = View.VISIBLE
@@ -407,7 +411,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
407411
fun getTeamMembers() {
408412
selectedTeamId = prefData.getSelectedTeamId().toString()
409413
if (selectedTeamId?.isNotEmpty() == true) {
410-
users = RealmMyTeam.getUsers(selectedTeamId, mRealm, "membership")
414+
users = databaseService.withRealm { realm ->
415+
RealmMyTeam.getUsers(selectedTeamId, realm, "membership").map { realm.copyFromRealm(it) }.toMutableList()
416+
}
411417
val userList = (users as? MutableList<RealmUserModel>)?.map {
412418
User(it.name ?: "", it.name ?: "", "", it.userImage ?: "", "team")
413419
} ?: emptyList()
@@ -444,7 +450,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
444450
binding.inputName.setText(user.name)
445451
} else {
446452
if (user.source == "guest"){
447-
val model = RealmUserModel.createGuestUser(user.name, mRealm, settings)?.let { mRealm.copyFromRealm(it) }
453+
val model = databaseService.withRealm { realm ->
454+
RealmUserModel.createGuestUser(user.name, realm, settings)?.let { realm.copyFromRealm(it) }
455+
}
448456
if (model == null) {
449457
toast(this, getString(R.string.unable_to_login))
450458
} else {
@@ -469,7 +477,9 @@ class LoginActivity : SyncActivity(), TeamListAdapter.OnItemClickListener {
469477
builder.setNegativeButton("cancel") { dialog: DialogInterface, _: Int -> dialog.dismiss() }
470478
builder.setPositiveButton("continue") { dialog: DialogInterface, _: Int ->
471479
dialog.dismiss()
472-
val model = RealmUserModel.createGuestUser(username, mRealm, settings)?.let { mRealm.copyFromRealm(it) }
480+
val model = databaseService.withRealm { realm ->
481+
RealmUserModel.createGuestUser(username, realm, settings)?.let { realm.copyFromRealm(it) }
482+
}
473483
if (model == null) {
474484
toast(this, getString(R.string.unable_to_login))
475485
} else {

app/src/main/java/org/ole/planet/myplanet/ui/sync/SyncActivity.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
357357
if (settings != null) {
358358
this.settings = settings
359359
}
360-
if (mRealm.isEmpty) {
360+
val isEmpty = databaseService.withRealm { realm -> realm.isEmpty }
361+
if (isEmpty) {
361362
alertDialogOkay(getString(R.string.server_not_configured_properly_connect_this_device_with_planet_server))
362363
false
363364
} else {
@@ -371,7 +372,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
371372

372373
private fun checkName(username: String?, password: String?, isManagerMode: Boolean): Boolean {
373374
try {
374-
val user = mRealm.where(RealmUserModel::class.java).equalTo("name", username).findFirst()
375+
val user = databaseService.withRealm { realm ->
376+
realm.where(RealmUserModel::class.java).equalTo("name", username).findFirst()?.let { realm.copyFromRealm(it) }
377+
}
375378
user?.let {
376379
if (it._id?.isEmpty() == true) {
377380
if (username == it.name && password == it.password) {
@@ -765,7 +768,9 @@ abstract class SyncActivity : ProcessUserDataActivity(), SyncListener, CheckVers
765768
continueSyncProcess()
766769
}
767770
} else {
768-
mRealm.executeTransactionAsync { realm: Realm -> realm.deleteAll() }
771+
lifecycleScope.launch(Dispatchers.IO) {
772+
databaseService.executeTransactionAsync { realm -> realm.deleteAll() }
773+
}
769774
}
770775
builder.setCancelable(cancelable)
771776
builder.show()

0 commit comments

Comments
 (0)