:core:databaseモジュールにrepositoryパッケージ(ディレクトリ)を追加し、データベース初期化クラスDatabaseInitializer.ktを作成します。
package jp.co.progress_llc.portal.core.data.repository
import javax.inject.Singleton
import javax.inject.Inject
import jp.co.progress_llc.portal.core.data.AppDatabase
@Singleton
class DatabaseInitializer @Inject constructor(
private val database: AppDatabase
) {
private var isInitialized = false
fun isInitialized(): Boolean {
return isInitialized && database.isOpen
}
fun initialize(): Boolean {
return if (isInitialized()) {
true
} else {
// データベースを開きます(存在しない場合は作成されます)
database.openHelper.writableDatabase.isOpen
isInitialized = true
true
}
}
}
:appモジュールに:core:databaseモジュールへの依存関係を追記します。
:
dependencies {
:
implementation(project(":core:database"))
:
}
追記後、『Sync Now』で内容をプロジェクトに反映させます。
:appモジュールのApplicationクラスにデータベース初期化処理の呼び出しを追記します。
データベースの初期化が終了する前に、ホーム画面が表示されないよう同期処理でデータベース初期化処理を呼び出します。
:
import javax.inject.Inject
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import jp.co.progress_llc.portal.core.data.repository.DatabaseInitializer
:
class PortalApplication: Application() {
@Inject
lateinit var databaseInitializer: DatabaseInitializer
override fun onCreate() {
super.onCreate()
// データベースを初期化します
initializeDatabase()
}
private fun initializeDatabase() {
// DatabaseInitializerを使用して初期化します
runBlocking {
withContext(Dispatchers.IO) {
databaseInitializer.initialize()
}
}
}
}
エミュレーターを起動して、アプリケーションを実行します。
ツールバー➡表示(V)➡ツールウィンドウ(T)➡App Inspectionでデータベースが作成されていることを確認します。