Skip to content

Conversation

@dogi
Copy link
Member

@dogi dogi commented Jan 7, 2026

Refactored TakeCourseFragment to use CoursesRepository for fetching course data.

  • Added getCourseById method to CoursesRepository to fetch a single course by its ID. The method returns a detached Realm object to ensure thread safety.
  • Replaced direct Realm database queries in TakeCourseFragment with calls to the new repository method.
  • Consolidated background operations in a single withContext(Dispatchers.IO) block for improved clarity and efficiency.

https://jules.google.com/session/2078176696301205303

Refactored TakeCourseFragment to use CoursesRepository for fetching course data.

- Added getCourseById method to CoursesRepository to fetch a single course by its ID. The method returns a detached Realm object to ensure thread safety.
- Replaced direct Realm database queries in TakeCourseFragment with calls to the new repository method.
- Consolidated background operations in a single withContext(Dispatchers.IO) block for improved clarity and efficiency.
@dogi dogi added triage Further information is requested small change labels Jan 7, 2026
Copy link
Collaborator

@Okuro3499 Okuro3499 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

java.lang.IllegalStateException: Can't commit a non-existing write transaction
	at io.realm.internal.OsSharedRealm.nativeCommitTransaction(Native Method)
	at io.realm.internal.OsSharedRealm.commitTransaction(OsSharedRealm.java:292)
	at io.realm.BaseRealm.commitTransaction(BaseRealm.java:459)
	at io.realm.Realm.commitTransaction(Realm.java:138)
	at io.realm.Realm.executeTransaction(Realm.java:1634)
	at org.ole.planet.myplanet.data.DatabaseService$executeTransactionAsync$2.invokeSuspend(DatabaseService.kt:60)
	at org.ole.planet.myplanet.data.DatabaseService$executeTransactionAsync$2.invoke(Unknown Source:8)
	at org.ole.planet.myplanet.data.DatabaseService$executeTransactionAsync$2.invoke(Unknown Source:4)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndspatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
	at org.ole.planet.myplanet.data.DatabaseService.executeTransactionAsync(DatabaseService.kt:58)
	at org.ole.planet.myplanet.repository.RealmRepository.executeTransaction(RealmRepository.kt:140)
	at org.ole.planet.myplanet.repository.CoursesRepositoryImpl.joinCourse(CoursesRepositoryImpl.kt:193)
	at org.ole.planet.myplanet.ui.courses.TakeCourseFragment$addRemoveCourse$1$isCurrentlyJoined$1.invokeSuspend(TakeCourseFragment.kt:343)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)

Refactored TakeCourseFragment to use CoursesRepository for fetching course data.

- Added getCourseById method to CoursesRepository to fetch a single course by its ID. The method returns a detached Realm object to ensure thread safety.
- Replaced direct Realm database queries in TakeCourseFragment with calls to the new repository method.
- Consolidated background operations in a single withContext(Dispatchers.IO) block for improved clarity and efficiency.
- Fixed a crash related to nested coroutine contexts causing an IllegalStateException during Realm transactions. Separated read and write operations to ensure proper transaction management.
Copy link
Collaborator

@Okuro3499 Okuro3499 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

java.lang.IllegalStateException: Can't commit a non-existing write transaction
	at io.realm.internal.OsSharedRealm.nativeCommitTransaction(Native Method)
	at io.realm.internal.OsSharedRealm.commitTransaction(OsSharedRealm.java:292)
	at io.realm.BaseRealm.commitTransaction(BaseRealm.java:459)
	at io.realm.Realm.commitTransaction(Realm.java:138)
	at io.realm.Realm.executeTransaction(Realm.java:1634)
	at org.ole.planet.myplanet.data.DatabaseService$executeTransactionAsync$2.invokeSuspend(DatabaseService.kt:60)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)

Refactored TakeCourseFragment to use CoursesRepository for fetching course data.

- Added getCourseById method to CoursesRepository to fetch a single course by its ID. The method returns a detached Realm object to ensure thread safety.
- Replaced direct Realm database queries in TakeCourseFragment with calls to the new repository method.
- Consolidated background operations in a single withContext(Dispatchers.IO) block for improved clarity and efficiency.
- Fixed a crash related to nested coroutine contexts causing an IllegalStateException during Realm transactions. Separated read and write operations to ensure proper transaction management.
- Fixed the root cause of the IllegalStateException by manually managing the Realm transaction lifecycle in DatabaseService.executeTransactionAsync.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

small change triage Further information is requested

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants