: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でデータベースが作成されていることを確認します。