workManager을 사용해서 데이터를 넣어보자
앞서 만든 Database를 조금 바꿔서
fun getDatabase(
context: Context,
):MsgDatabase {
if(INSTANCE ==null){
val instance = Room.databaseBuilder(
context.applicationContext,
MsgDatabase::class.java,
"msg.db"
).addCallback(
object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
val rq = OneTimeWorkRequestBuilder<PopDatabase>().build()
WorkManager.getInstance(context).enqueue(rq)
}
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
val rq = OneTimeWorkRequestBuilder<StartAppWorker>().build()
WorkManager.getInstance(context).enqueue(rq)
}
}
).build()
INSTANCE = instance
}
return INSTANCE!!
}
이렇게 만들어서 생성될 때 popDatabase가 실행되도록하고
database가 열릴때마다 StartAppworker이 실행
그리고 Fragment단에서
btnfun = Btn{
val rq = OneTimeWorkRequestBuilder<BtnClickWorker>().build()
WorkManager.getInstance(requireContext()).enqueue(rq)
}
이 함수를 추가하여 버튼을 클릭할때마다 BtnClickWorker이 동작하도록 만들고
worker들을 설정해준다.
class BtnClickWorker(context: Context, workerParameters: WorkerParameters)
: CoroutineWorker(context,workerParameters) {
override suspend fun doWork(): Result {
return try {
coroutineScope {
val database = MsgDatabase.getDatabase(applicationContext)
database.msgDao().insertMsg(MsgData(msg = "버튼 클릭함!"))
}
Result.success()
}catch (e: Exception){
Result.failure()
}
}
}
class StartAppWorker(context: Context,workerParameters: WorkerParameters)
:CoroutineWorker(context,workerParameters) {
override suspend fun doWork(): Result {
return try {
coroutineScope {
val database = MsgDatabase.getDatabase(applicationContext)
database.msgDao().insertMsg(MsgData(msg = "들어왔다"))
}
Result.success()
}catch (e: Exception){
Result.failure()
}
}
}
class PopDatabase(context: Context, workerParameters: WorkerParameters)
: CoroutineWorker(context,workerParameters) {
override suspend fun doWork(): Result {
return try {
coroutineScope {
val database = MsgDatabase.getDatabase(applicationContext)
database.msgDao().insertMsg(MsgData(msg = "만들어 졌다."))
}
Result.success()
}catch (e:Exception){
Result.failure()
}
}
}
dㅣ이제 사용해보자
이렇게 사용하는게 맞는지 모르겠지만 일단은 동작함!
'안드로이드 jetpack > 적용해보기' 카테고리의 다른 글
1. paging3 와 Room연결해서 사용해보기 (0) | 2021.05.02 |
---|