Pablo
03/16/2025, 4:54 PMsingle<CustomDatabase> {
coroutine.launch {
//use datastore
}
Room.databaseBuilder(
context,
CustomDatabase::class.java, "database"
).createFromAsset("data.db").build()
}
How can I use corutines inside a singleton Koin creation? can I use runBlocking? will it block UI?Mark
03/17/2025, 5:42 AMPablo
03/17/2025, 7:42 AMPablo
03/17/2025, 7:42 AMFedor Sorokin
03/17/2025, 7:53 AMMark
03/17/2025, 8:01 AMDeferred
instead and reference it using a TypeQualifier
Leo N
03/20/2025, 6:03 AMPablo
03/20/2025, 8:29 AMLeo N
03/20/2025, 8:54 AMPablo
03/20/2025, 9:05 AMPablo
03/20/2025, 9:05 AMPablo
03/20/2025, 9:06 AMLeo N
03/20/2025, 9:07 AMPablo
03/20/2025, 9:26 AMPablo
03/20/2025, 9:27 AMPablo
03/20/2025, 9:27 AMMark
03/20/2025, 9:47 AMCustomDatabaseFactory
class provided via koin? Expose whatever using suspending funs.Pablo
03/20/2025, 9:49 AMPablo
03/20/2025, 9:50 AMLeo N
03/21/2025, 8:20 AMPablo
03/21/2025, 8:21 AMPablo
03/21/2025, 8:21 AMPablo
03/21/2025, 8:22 AMPablo
03/21/2025, 8:22 AMLeo N
03/21/2025, 8:24 AMPablo
03/21/2025, 8:26 AMLeo N
03/21/2025, 8:27 AMPablo
03/21/2025, 8:28 AMPablo
03/21/2025, 8:29 AMLeo N
03/21/2025, 8:30 AMPablo
03/21/2025, 8:31 AMPablo
03/21/2025, 8:31 AMPablo
03/21/2025, 8:31 AMPablo
03/21/2025, 8:31 AMLeo N
03/21/2025, 8:32 AMLeo N
03/21/2025, 8:32 AMPablo
03/21/2025, 8:32 AMPablo
03/21/2025, 8:33 AMsingle<CustomDatabase> {
Room.databaseBuilder(
androidContext(),
CustomDatabase::class.java, "database"
)
.createFromAsset("data.db")
.build()
}
Pablo
03/21/2025, 8:33 AMPablo
03/21/2025, 8:34 AMPablo
03/21/2025, 8:34 AMPablo
03/21/2025, 8:34 AMLeo N
03/21/2025, 8:34 AMPablo
03/21/2025, 8:35 AMPablo
03/21/2025, 8:35 AMPablo
03/21/2025, 8:35 AMPablo
03/21/2025, 8:35 AMLeo N
03/21/2025, 8:35 AMLeo N
03/21/2025, 8:35 AMPablo
03/21/2025, 8:36 AMPablo
03/21/2025, 8:37 AMPablo
03/21/2025, 8:37 AMRoom.databaseBuilder(appContext, AppDatabase::class.java, "Sample.db")
.createFromAsset("database/myapp.db")
.build()
this is how it worksPablo
03/21/2025, 8:37 AMcreateFromAsset
call which does the IO job internally and returns the prepopulated databasePablo
03/21/2025, 8:38 AMPablo
03/21/2025, 8:38 AMLeo N
03/21/2025, 8:41 AMRoom.databaseBuilder(appContext, AppDatabase::class.java, "Sample.db")
.createFromAsset("database/myapp.db")
.build()
Leo N
03/21/2025, 8:42 AMPablo
03/21/2025, 8:42 AMLeo N
03/21/2025, 8:43 AMPablo
03/21/2025, 8:43 AMPablo
03/21/2025, 8:43 AMLeo N
03/21/2025, 8:43 AMPablo
03/21/2025, 8:43 AMPablo
03/21/2025, 8:44 AMLeo N
03/21/2025, 8:44 AMPablo
03/21/2025, 8:44 AMPablo
03/21/2025, 8:44 AMPablo
03/21/2025, 8:45 AMPablo
03/21/2025, 8:45 AMLeo N
03/21/2025, 8:45 AMPablo
03/21/2025, 8:46 AMLeo N
03/21/2025, 8:46 AM// code inside factory
var cachedInstance: RoomClassOrSomething? = null
fun getInstance() {
if(cachedInstance == null)
cachedInstance = InitializeRoom()
return cachedInstance
}
something like thisLeo N
03/21/2025, 8:46 AMPablo
03/21/2025, 8:47 AMPablo
03/21/2025, 8:47 AMLeo N
03/21/2025, 8:47 AMPablo
03/21/2025, 8:47 AMLeo N
03/21/2025, 8:48 AMPablo
03/21/2025, 8:48 AMPablo
03/21/2025, 8:48 AMPablo
03/21/2025, 8:49 AMPablo
03/21/2025, 8:50 AMLeo N
03/21/2025, 8:51 AMPablo
03/21/2025, 8:52 AMPablo
03/21/2025, 8:52 AM// code inside factory
var cachedInstance: RoomClassOrSomething? = null
fun getInstance() {
if(cachedInstance == null)
cachedInstance = InitializeRoom()
return cachedInstance
}
Leo N
03/21/2025, 8:56 AMclass RoomFactoryImpl: RoomFactory {
var cachedInstance: RoomClassOrSomething? = null
fun getInstance() {
if(cachedInstance == null)
cachedInstance = InitializeRoom()
return cachedInstance
}
}
Registration in Koin
single<RoomFactory> {
RoomFactoryImpl() // this will be called when you need this injected
}
Usage in view:
// get instance in constructor
val room = roomFactory.getInstance()
// turn on loading screen
val stuff = room.getStuff()
// turn off loading screen
Pablo
03/21/2025, 8:57 AMLeo N
03/21/2025, 8:57 AMPablo
03/21/2025, 8:59 AMPablo
03/21/2025, 8:59 AMLeo N
03/21/2025, 9:00 AMPablo
03/21/2025, 9:00 AMAlexandru Caraus
03/22/2025, 9:34 AMAlexandru Caraus
03/22/2025, 9:35 AMAlexandru Caraus
03/22/2025, 9:35 AMAlexandru Caraus
03/22/2025, 9:36 AMAlexandru Caraus
03/22/2025, 9:36 AM